DateTime.Parse with overflow
มีทางเลือกอื่นสำหรับ DateTime.Parse ที่จะรับวันที่ล้นหรือเดือนแบบนี้หรือไม่?
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Tests
{
[TestClass]
public class DateTimeTest
{
[TestMethod]
public void TestOverflowOfDay()
{
var dt = DateTime.Parse("2020-01-32");
var str = dt.ToString();
Assert.AreEqual("2020-02-01 00:00:00", str);
}
}
}
รหัสนี้ส่งผลให้System.FormatException
เกิดDateTime.Parse
บรรทัด
ไม่รู้จักสตริงว่าเป็น DateTime ที่ถูกต้อง
ฉันสามารถแยกวิเคราะห์สตริงที่ปล่อยให้โอเวอร์โฟลว์จึงจะถือว่าเป็น"2020-02-01"
?
ดูเหมือนว่าจะเป็นมาตรฐานในภาษาอื่น ๆ / การใช้งาน
คำตอบ
ฉันไม่รู้ว่าคุณทำได้อย่างไรโดยไม่ต้องหมุนตัวเอง หากคุณทราบรูปแบบวันที่ของคุณคุณสามารถทำสิ่งต่อไปนี้หรือสิ่งที่คล้ายกัน
static void Main(string[] args)
{
var date = GetCustomDateTime("2020-01-32");
Console.WriteLine(date.ToString("yyyy-MM-dd HH:mm:ss"));
}
private static DateTime GetCustomDateTime(string dateTimeString)
{
var split = dateTimeString.Split('-');
var yearMonth = DateTime.ParseExact($"{split[0]}-{split[1]}", "yyyy-MM", CultureInfo.InvariantCulture);
return yearMonth.AddDays(int.Parse(split[2])-1);
}
นี้ไม่ได้รับผลกระทบจากกลางวันเวลาออมทรัพย์ที่มาที่นี่
การดำเนินการทางคณิตศาสตร์หรือการเปรียบเทียบกับค่าวันที่และเวลาท้องถิ่นจะไม่พิจารณาว่าค่าใดค่าหนึ่งไม่ชัดเจนหรือไม่ถูกต้องหรือไม่และไม่คำนึงถึงผลกระทบของกฎการปรับเปลี่ยนใด ๆ ที่เป็นผลมาจากการเปลี่ยนเขตเวลาท้องถิ่นไปเป็นหรือจากเวลาออมแสง