tl; dr: Można wykorzystać to, co DateTimeFormatInfo.GetEraName
/GetAbbreviatedEraName
zwrot jako separatora, ignorując sprawę. Kolejność: dzień, miesiąc, rok (opcjonalnie).
Wydaje zawsze można użyć kalendarza aktualny era's abbreviated name lub full era-name jako ogranicznik dla tokenów DateTime. W przypadku angielskich hodowli jest to AD
lub A.D.
, np. dla kultur niemieckich jest to 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
ciekawe jest rozróżniana wielkość liter, więc ad
prace również. Która jest udokumentowana w DateTimeFormatInfo.GetEra
:
Nazwa era to nazwa kalendarz używa się w odniesieniu do okresu liczony od ustalonego punktu lub zdarzenia. Na przykład "A.D." lub "C.E." jest obecna era kalendarza gregoriańskiego. Porównanie z eraName jest niewrażliwe na wielkość liter, na przykład "A.D." jest równoważne "a.d.".
Kalendarz gregoriański ma tylko jedną erę, więc Calendar.GetEra(DateTime.Now)
nie jest naprawdę konieczne. Nie znalazłem jeszcze żadnej dokumentacji.
Oto kilka próbek, że wszystkie prace i będzie analizowany na Boże Narodzenie 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
działa, jeśli mogę zmienić obecną kulturę 'en-US' lub' en-GB', nie wiem dlaczego albo –
Nawet dla 'DateTime.Parse ("AD3AD08", CultureInfo.InvariantCulture); ' – xanatos
To jest nazwa ery (AD = anno domini) – xanatos