【发布时间】:2020-08-18 11:12:23
【问题描述】:
是否有替代 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);
}
}
}
此代码在DateTime.Parse 行上生成System.FormatException。
字符串未被识别为有效的日期时间
我能否解析允许溢出的字符串,使其被视为"2020-02-01"?
这似乎是其他语言/实现的标准。
【问题讨论】:
-
“这似乎是其他语言/实现的标准。”什么?你能说出支持这个的语言/实现吗?
-
即使是 javascript 也不允许这样做:
Date.parse("2020-01-32")=> NaN -
所以你想要
DateTime.Parse("2020-01").AddDays(int.Parse("32") - 1); -
刚刚发现 Java 的
SimpleDateFormat允许 32 天,尽管您可以通过setLenient(false)禁止它...也就是说,SimpleDateFormat是一个 糟糕 API远非标准。 -
“只要你知道自己在做什么,就不会那么糟糕” - 是的,发明你自己的 DateTime 格式是糟糕的,无论如何什么。你为什么需要这个?你能考虑替代方案吗?