오버플로가있는 DateTime.Parse

Aug 18 2020

이와 같이 오버플로 날짜 또는 월을 허용하는 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.FormatExceptionDateTime.Parse라인에 있습니다.

문자열이 유효한 DateTime으로 인식되지 않았습니다.

오버플로를 허용하는 문자열을 구문 분석하여 다음과 같이 처리 할 수 "2020-02-01"있습니까?

그것은 다른 언어 / 구현에서 표준 인 것 같습니다.

답변

1 GarrisonBecker Aug 18 2020 at 18:35

나는 당신이 당신 자신을 굴리지 않고 어떻게 이것을 할 수 있는지 모릅니다. 날짜 / 시간의 형식을 알고 있다면 다음을 수행하거나 유사한 작업을 수행 할 수 있습니다.

        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);
        }

이는 일광 절약 시간의 영향을받지 않으며 여기 에서 제공 합니다 .

현지 날짜 및 시간 값에 대한 산술 또는 비교 연산은 특정 값이 모호하거나 유효하지 않은지 여부를 고려하지 않으며, 일광 절약 시간으로 또는 일광 절약 시간에서 현지 시간대의 전환으로 인해 발생하는 조정 규칙의 영향을 고려하지 않습니다.