พิจารณารหัสนี้ (มีตัวอย่าง):
DateTime dt1 = DateTime.Parse("7/30/2010 9:33:29.1234567 AM");
DateTime dt2 = DateTime.Parse("6/30/2010 9:33:00.7654321 AM");
TimeSpan ts = dt1 - dt2;
Console.WriteLine(string.Format( "{0:d.hh:mm:ss.ff}", ts ));
นี่เป็นตัวแทนของโค้ดบางส่วนที่ฉันใช้งานตั้งแต่ .NET 1.1 เป็นอย่างน้อย
มันทำงานได้ดีใน 1.1 ถึง 3.5 โดยมีเอาต์พุตต่อไปนี้ (สำหรับอินพุตจำลองเหล่านี้):
30.00:00:28.3580246
แต่ตอนนี้ฉันเห็นว่ามันตายใน .NET 4 พร้อมข้อความแสดงข้อผิดพลาด:
Input string was not in a correct format.
เหมือนกับว่า .NET 4 ตัดสินใจทันทีว่าไม่ชอบรูปแบบนี้เนื่องจากความแตกต่างของเวลา เปลี่ยนแนวเป็นว่า.
Console.WriteLine(string.Format( "{0}", ts.ToString("d.hh:mm:ss.ff") ));
มีผลเช่นเดียวกัน
ตอนนี้สิ่งที่ฉันสังเกตเห็นก็คือถ้าฉันใช้ค่าเริ่มต้น .ToString()
ฉันจะได้ผลลัพธ์เดียวกัน ฉันเชื่อว่ากระบวนการคิดคือนี่เป็นกรมธรรม์ประกันภัยสำหรับรูปแบบเริ่มต้นที่เปลี่ยนแปลงในเวอร์ชันอนาคต แต่ตอนนี้ดูเหมือนว่านั่นจะไม่ใช่ตัวเลือกด้วยซ้ำ
ไม่มีใครรู้ว่าเหตุใดสิ่งนี้จึงเปลี่ยนแปลง และถ้าฉันทำอะไรผิดหรือมีแนวทางปฏิบัติที่ดีที่สุดในสิ่งที่ฉันพยายามทำให้สำเร็จหรือไม่