2011-09-15 26 views
5

मेरे पास टाइमस्पेन क्लास के साथ एक छोटा सा मुद्दा है जहां यह 23:59 को पार्स कर सकता है लेकिन 24:00 नहीं।टाइमस्पेन पार्सिंग के लिए चारों ओर काम करें 24:00

बेशक क्लाइंट दिन के अंत को 23:59 या 00:00 के बजाय दिन के अंत को इंगित करने के लिए 24:00 दर्ज करना चाहता है क्योंकि 00:00 दिन की शुरुआत दर्शाता है।

वर्तमान में मेरे कोड को पार्स करता है तो जैसे अंत समय:

if (!TimeSpan.TryParse((gvr.FindControl("txtTimeOff") as TextBox).Text, out tsTimeOff)) 
{ 
    this.ShowValidationError(String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
    return false; 
} 

क्या सबसे अच्छा इस स्थिति के लिए चारों ओर काम करता है?

संपादित करें: (समाधान 1)

if ((gvr.FindControl("txtTimeOff") as TextBox).Text == "24:00") 
{ 
    tsTimeOff = new TimeSpan(24, 0, 0); 
} 
else 
{ 
    if (!TimeSpan.TryParse((gvr.FindControl("txtTimeOff") as TextBox).Text, out tsTimeOff)) 
    { 
     this.ShowValidationError(
      String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
     return false; 
    } 
} 

संपादित करें: (solution2)

string timeOff = (gvr.FindControl("txtTimeOff") as TextBox).Text; 

if (!TimeSpan.TryParse(
     timeOff == "24:00" ? "1.00:00:00" : timeOff 
     , out tsTimeOff)) 
{ 
    this.ShowValidationError(
     String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
    return false; 
} 
+3

आप स्ट्रिंग को "24:00" विशेष मामले के रूप में आसानी से संभाल सकते हैं .. – codymanix

+0

@codymanix - t हैंक्स, मैं दोनों विकल्पों को आजमाने की कोशिश कर रहा हूं – WraithNath

उत्तर

7

इस

textBox = (TextBox) gvr.FindControl ("txtTimeOff"); 

TimeSpan.TryParse (textBox.Text == "24:00" 
         ? "1.00:00" 
         : textBox.Text, 
        out tsTimeOff) 
+0

@ याहिया- धन्यवाद, मैं – WraithNath

+1

सुझाए गए दोनों विकल्पों को आजमाने की कोशिश करता हूं, धन्यवाद, मैंने प्रश्न के दोनों समाधान जोड़े हैं। – WraithNath

4

की तरह कुछ की कोशिश आम तौर पर System.TimeSpan वर्ग अच्छी तरह से अनुकूल नहीं है "समय में बिंदु" का प्रतिनिधित्व करने के लिए, बल्कि, जैसा कि नाम से पता चलता है, समय या अवधि का "अवधि"। यदि आप System.DateTime का उपयोग करने के लिए अपने कोड को दोबारा कर सकते हैं, या बेहतर अभी तक System.DateTimeOffset, यह सबसे अच्छा समाधान होगा। यदि यह संभव नहीं है तो याहिया का दूसरा उत्तर आपकी सबसे अच्छी शर्त है :)

+0

धन्यवाद, मैं टाइमपैन का उपयोग कर रहा हूं क्योंकि स्टार्ट टाइम भी एक समय है, फिर मुझे दोनों के बीच घंटों की संख्या मिल रही है। – WraithNath

+0

'टाइमस्पेन' एक दिन के समय का प्रतिनिधित्व करने के लिए सामान्य .NET तरीका है - यह उस बिंदु पर है जो या तो हर दिन दोहराता है या अन्य किसी तारीख के साथ संयुक्त होने पर ही पूरी तरह से परिभाषित किया जाता है। जैसे 'DateTime.TimeOfDay'। –

+0

@ जोनहन्ना येप थोड़ा अलग है, उस स्थिति में आप मध्यरात्रि से ऑफसेट के रूप में दिन का समय व्यक्त कर रहे हैं - जो एक समय के साथ पूरी तरह से प्रतिनिधित्व योग्य है (उदाहरण के लिए मध्यरात्रि और 8 घंटे)। समय में एक वास्तविक बिंदु का प्रतिनिधित्व करने के लिए आपको 'डेटटाइम' के साथ जोड़ा जाना होगा जैसा कि आप कहते हैं। – MattDavey

4

ईमानदारी से सबसे अच्छा समाधान यह है कि आपके ग्राहक को सूचित करें कि 24:00 मान्य समय नहीं है और उसे 0:00 का उपयोग करना चाहिए। मैंने 23:59 से 24:00 तक घड़ी की घड़ी कभी नहीं देखी है।

लेकिन अगर आप जोर देते हैं ... अतः निम्नलिखित प्रश्न जो एक ही सवाल होता है और संभव समाधान का एक समूह होता है की जाँच:

Parsing times above 24 hours in C#

+0

धन्यवाद, मुझे पता है कि आपका क्या मतलब है। बस देखना चाहता था कि आसपास एक आसान काम था या नहीं। मुझे पट्टा पट्टे पर देना है और ग्राहक को जो चाहिए वो देना है! :) – WraithNath

+0

ग्राहक को बताएं कि वे क्या चाहते हैं! ;) hehe – MattDavey

+0

किसी ग्राहक को बताने में कुछ भी गलत नहीं है कि उसका सुझाव इष्टतम नहीं हो सकता है और एक अलग दृष्टिकोण का सुझाव दे सकता है। इस पर निर्भर करता है कि आप इसे कैसे वाक्यांश देते हैं;) –

संबंधित मुद्दे