2011-12-30 13 views
5

यह सिर्फ काम करने के लिए नहीं चाहता है:कैसे करें कोशिश करें एक स्ट्रिंग को केवल 24-घंटे के साथ रखें?

DateTime time; 

DateTime.TryParseExact("17", "HH", ..., out time); 
    // works fine 

DateTime.TryParseExact("9", "HH", ..., out time); 
    // works fine, but 9 doesn't match HH (nor should it) 

DateTime.TryParseExact("9:", "H':'", ..., out time); 
    // works fine 

DateTime.TryParseExact("9", "H", ..., out time); 
    // exception: "Input string was not in a correct format" 

तथ्य यह है कि # 3 काम करता है एक स्पष्ट प्रदान करता है काम के आसपास है, लेकिन यह उन चीजों है कि मुझे जाना "WTF" अगर मैं में इसे देखा होगा में से एक है किसी और का कोड TryParseExact छोटी गाड़ी या कुछ है?

+0

शायद इसे डेटटाइम के बजाय टाइमस्पेन में परिवर्तित करने के लिए और अधिक समझदारी होती है ... – Francisco

+0

@ फ्रांसिस्को मुझे ऐसा नहीं लगता है; 'टाइमस्पेन' "am/pm" जैसी चीज़ों का विश्लेषण नहीं करता है क्योंकि यह समय के बजाय एक समय _span_ का प्रतिनिधित्व करता है। और आपके पास ऐसी चीजें कभी नहीं हैं जैसे "हमें 2.5 घंटे का समय लगे"। –

उत्तर

8

आप DateTime.TryParseExact("5", "%H", null, DateTimeStyles.None, out time) उपयोग कर सकते हैं।

शून्य एक बस "H" प्रारूप का उपयोग करने के लिए परीक्षा हो सकता है प्रमुख के बिना एक 24-घंटे घड़ी में घंटा पार्स करने के लिए, लेकिन एक custom date and time format दो या अधिक वर्ण, जो "H" तक ले जाएगा एक standard date and time format के रूप में व्याख्या की जा रही से मिलकर चाहिए, एक प्रारूप अपवाद के परिणामस्वरूप।

MSDN on Custom Date and Time Format Strings से

:

एक प्रारूप स्ट्रिंग में केवल विनिर्देशक के रूप में कस्टम दिनांक और समय प्रारूप विनिर्देशक के किसी भी उपयोग करने के लिए (जो है, उपयोग करने के लिए "डी", "च", "एफ "," जी ", " एच "," एच "," के "," एम "," एम "," एस "," टी "," वाई "," जेड ",": ", या"/"कस्टम प्रारूप स्वयं द्वारा निर्दिष्ट), विनिर्देशक से पहले या उसके बाद एक स्पेस शामिल करें, या एकल कस्टम दिनांक और समय निर्दिष्टकर्ता से पहले एक प्रतिशत ("% ") प्रारूप विनिर्देशक शामिल करें।

मैंने पहले के बाद से मुझे लगता है कि पहले या बाद में एक अंतरिक्ष टाइप करने की त्रुटि के रूप में व्याख्या की जा सकती है और किसी के द्वारा हटाया जा % हस्ताक्षर शामिल करने के लिए पसंद करते हैं।

0

क्या इस तरह इसे प्रयोग के बारे में:

DateTime dt; 
DateTime.TryParseExact("09", "HH", null, 
    System.Globalization.DateTimeStyles.None, out dt); 
+1

"9" उपयोगकर्ता इनपुट है; मैं उन्हें 0 –

+0

दर्ज करने के लिए नहीं कह सकता हूं, यदि स्ट्रिंग की लंबाई 1 है तो आप 0 को प्रीपेड कर सकते हैं। वैसे भी, जोआओ एंजेलो का जवाब खूबसूरती से काम करता है। – epignosisx

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