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);
}
Это не зависит от перехода на летнее время, указанного здесь .
Арифметические операции или операции сравнения для локальных значений даты и времени не учитывают, является ли конкретное значение неоднозначным или недопустимым, а также не учитывают влияние каких-либо правил корректировки, возникающих в результате перехода местного часового пояса на летнее время или из него.