DateTime.Parse("AD3AD08")
[2017-08-03 12:00:00 AM]
为什么该字符串(在我看来就像是普通的十六进制字符串)被成功解析为日期?我可以看到3和8被解析为几个月和几天。但是否则对我来说这没有意义。
最佳答案
tl;博士:您可以使用 DateTimeFormatInfo.GetEraName
/ GetAbbreviatedEraName
返回的内容作为分隔符,而无需考虑大小写。顺序为:日,月,年(可选)。
看来您总是可以将日历的当前era's abbreviated name或full era-name用作DateTime token 的定界符。对于英语文化,它是AD
或A.D.
,例如对于德国文化,它是n. Chr.
。
var enCulture = new CultureInfo("en-GB");
System.Threading.Thread.CurrentThread.CurrentCulture = enCulture;
var fi = enCulture.DateTimeFormat;
int currentEra = enCulture.Calendar.GetEra(DateTime.Now);
var eraName = fi.GetEraName(currentEra);
var shortEra = fi.GetAbbreviatedEraName(currentEra);
var date = DateTime.Parse($"{shortEra}3{shortEra}08"); // AD or A.D. works
var deCulture = new CultureInfo("de-DE");
System.Threading.Thread.CurrentThread.CurrentCulture = deCulture;
fi = deCulture.DateTimeFormat;
currentEra = deCulture.Calendar.GetEra(DateTime.Now);
eraName = fi.GetEraName(currentEra);
shortEra = fi.GetAbbreviatedEraName(currentEra);
date = DateTime.Parse($"{shortEra}3{shortEra}08"); // n. Chr. works
有趣的是,它不区分大小写,因此
ad
也可以使用。记录在 DateTimeFormatInfo.GetEra
中:阳历只有一个时代,因此
Calendar.GetEra(DateTime.Now)
并不是必需的。我还没有找到任何进一步的文档。以下是一些可以正常使用并将在2017年圣诞节前解析的示例:
DateTime christmas = DateTime.Parse("ad25ad12ad2017ad");
christmas = DateTime.Parse("AD25ad12ad2017");
christmas = DateTime.Parse("25ad12ad2017AD");
christmas = DateTime.Parse("25ad12ad2017");
christmas = DateTime.Parse("A.D.25ad12ad2017");
christmas = DateTime.Parse("A.D.25ad12ad"); // current year is used
christmas = DateTime.Parse("A.D.25ad12"); // current year is used
关于c# - 为什么AD3AD08在.NET Framework中代表有效日期?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43339856/