2010-07-11 8 views
23

मैं टाइम्सपैन के साथ कुछ गणित कर रहा हूं। नेट, और कभी-कभी ऋणात्मक टाइम्स पैन में परिणाम मिलता है। जब मैं परिणाम प्रदर्शित करता हूं तो मुझे ऋणात्मक संकेतक शामिल करने में इसे स्वरूपित करने में समस्या आ रही है। "00 -10: 00" है, जो अच्छा है, लेकिन मैं सेकंड तो यह कोशिश की दिखाने के लिए नहीं करना चाहतीनकारात्मक टाइमस्पैन स्वरूपण

Dim ts as New Timespan(-10,0,0) 

ts.ToString() 

यह प्रदर्शित करेगा।

ts.ToString("hh\:mm") 

यह "10:00" देता है और इस मुद्दे के क्रूक्स के सामने से "-" गिरा देता है। मेरा वर्तमान समाधान यह है:

If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm") 

लेकिन मैं केवल प्रारूप स्ट्रिंग का उपयोग करके इसे पूरा करने की उम्मीद कर रहा था।

+0

बहुत अजीब। एमएसडीएन सुझाव देता है कि यह 'सी' प्रारूप के माध्यम से समर्थित है, लेकिन यदि आप इसे कस्टम प्रारूप में उपयोग करते हैं, तो यह http://msdn.microsoft.com/en-us/library/ee372286(v=vs.100) को क्रैश करता है। एएसपीएक्स –

उत्तर

11

मैंने टाइमस्पैन.ToString (...) पर नेट परावर्तक का उपयोग किया है और यह वास्तव में ऐसा नहीं लगता है कि यह कस्टम प्रारूपों पर किसी भी नकारात्मक उपसर्ग का समर्थन करता है - इसलिए मुझे लगता है कि आप भाग्य से बाहर हैं उपर्युक्त के रूप में आपके लिए काम करने के लिए आता है। :(

2

मैं विल के साथ सहमत हूं। एमएसडीएन और परावर्तक दोनों संकेत देते हैं कि आप भाग्य से बाहर हैं। सबसे अच्छा जो आप प्राप्त करेंगे, वह आपके पास है जो आपके पास है, अपना खुद का IFormatProvider लिखें, या मानक में से एक का उपयोग करें "जी" जैसे टाइम्स पैन के लिए प्रारूप।

8

ऐसा लगता है कि आप उस कोड से फंस गए हैं, लेकिन यदि ऐसा है, तो यह एक एक्सटेसन विधि लिखने के लिए एक अच्छा समय लगता है, इस तरह आप अपना कोड स्पष्ट कर सकते हैं और आप नहीं 'टी, कई स्थानों में है कि कोड को दोहराना कुछ की तरह तो:

:

Module Extensions 
    <System.Runtime.CompilerServices.Extension()> _ 
    Public Function HoursAndMinutes(ByVal ts As TimeSpan) As String 
     Return If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm") 
    End Function 
End Module 

और फिर आप बस के रूप में यह कह सकते हैं

ts.HoursAndMinutes() 
+0

इसे विशिष्ट प्रारूप के साथ विस्तार विधियों का दुरुपयोग माना जा सकता है। – mattmc3

+0

@ mattmc3: ठीक है, मैं शायद इस तरह एक नहीं लिखूंगा और एक सामान्य पुस्तकालय में डालूंगा, लेकिन एक विशिष्ट परियोजना को और अधिक पठनीय बनाने के लिए मैं इसके बारे में चिंता नहीं करूंगा। –

+0

मैंने इसे एक विस्तार विधि के रूप में कार्यान्वित करने का अंत किया, इसलिए धन्यवाद। विल को जवाब दिया क्योंकि वह पुष्टि करने वाले पहले व्यक्ति थे, केवल प्रारूप स्ट्रिंग के साथ नहीं किया जा सका। शायद मैट का दुरुपयोग करें, लेकिन इस ऐप में लगभग हर टेक्स्टबॉक्स को इस तरह प्रारूपित करने की आवश्यकता है, इसलिए मुझे लगता है कि इस मामले में यह ठीक है। –

1

मानक प्रारूप "सी" नकारात्मक संकेत प्रदान करता है, लेकिन समय के सभी हिस्सों को शामिल करता है।

Dim ts As New TimeSpan(-10, 1, 2) 
    Debug.WriteLine(ts.ToString("c")) 
1

मैं इस fugly कोड का उपयोग कर रहा:

if (timeDiff.TotalSeconds < 0) 
      { 
       timeDiff = timeDiff.Negate(); 
       TimeChangeTb.Text = string.Format("-{0:D2}:{1:D2}:{2:D2}", 
       timeDiff.Hours, 
       timeDiff.Minutes, 
       timeDiff.Seconds); 
      } 
      else 
      { 
       TimeChangeTb.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", 
       timeDiff.Hours, 
       timeDiff.Minutes, 
       timeDiff.Seconds); 
      } 

आशा है कि यह मदद करता है!

0

@ ho1 उत्तर के आधार पर, मैंने एक विस्तार विधि बनाई है। आजकल उपयोग करने के लिए थोड़ा आसान हो सकता है।

public static class TimeSpanUtil 
{ 
    public static string HoursAndMinutes(this TimeSpan ts) 
    { 
     return (ts < TimeSpan.Zero ? "-" : "") + ts.ToString("hh:mm");  
    }   
} 
संबंधित मुद्दे