DateTime.Parse ile taşma
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
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.