DateTime.Parse ile taşma

Aug 18 2020

DateTime.Parse'a bunun gibi taşan bir tarihi veya ayı kabul edecek bir alternatif var mı?

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

Bu kod, bir sonuçlanır System.FormatExceptionüzerine DateTime.Parseçizgi.

Dize, geçerli bir DateTime olarak tanınmadı

Taşmaya izin veren dizeyi ayrıştırabilir miyim, böylelikle kabul edilebilir "2020-02-01"mi?

Bu, diğer dillerde / uygulamalarda standart gibi görünüyor.

Yanıtlar

1 GarrisonBecker Aug 18 2020 at 18:35

Kendin yapmadan bunu nasıl yapabilirsin bilmiyorum. Veri saatlerinin biçimini biliyorsanız, aşağıdakileri veya benzer bir şeyi yapabilirsiniz.

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

Bu, buradan kaynaklanan gün ışığından yararlanma süresinden etkilenmez .

Yerel tarih ve saat değerlerindeki aritmetik veya karşılaştırma işlemleri, belirli bir değerin belirsiz veya geçersiz olup olmadığını dikkate almaz veya yerel saat diliminin gün ışığından yararlanma saatine veya bu saatten geçişinden kaynaklanan herhangi bir ayarlama kuralının etkisini hesaba katmaz.