如何解决DateTime.Parse与溢出
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);
}
这不受夏令时的影响,来源为here。
对本地日期和时间值进行算术或比较运算 不考虑某个特定值是模棱两可还是无效,也不考虑 他们是否考虑了由此产生的任何调整规则的影响 从本地时区到夏令时的转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。