Il y avait 445 jours en 45 avant JC, vous devrez donc ajouter cela, et passer de Julian (45bc) au calendrier romain précédent. Le changement de calendrier grégorien est venu beaucoup plus tard (1500s) que vous avez besoin donc vous n'avez pas à vous en préoccuper.
Les deux principaux problèmes de l'utilisation de DateTime sont les constantes min et max. Évidemment, étant une structure, vous ne pouvez pas la sous-classer non plus.
Ma première option serait d'écrire ma structure BigDateTime ou BCDateTime, et d'utiliser un DateTime à l'intérieur de cette composition. Vous pouvez ensuite définir votre calendrier en cours:
CultureInfo.CurrentCulture.DateTimeFormat.Calendar = new JulianCalendar();
pour la Julian une, mais comme je l'ai mentionné que vous donne seulement à 45 ans avant notre ère
Si l'année est inférieure à 45 vous passez à nouveau Calendriers à votre propre sous-classé Calendar objet. Si l'année est 45, vous aurez besoin d'un autre calendrier avec les 445 jours pour cette année (ils l'ont fait pour ajuster entre l'ancien calendrier). Quelles seront vos constantes min et max pour cet objet? L'aube de la civilisation elle-même ?!
Vous aurez besoin de choisir ceux-ci, et aussi à l'esprit le calendrier julien et sa version précédente non-réformée étaient spécifiques pour les pays de l'empire romain. Étant un occidental je n'ai aucune idée des autres calendriers qui existaient, vous obtiendrez beaucoup plus d'information de thewikipediaarticlesthough.
Si vous choisissez de faire toutes les cultures, alors vous avez une énorme tâche à accomplir (comme l'a fait l'équipe .NET originale) pour implémenter des calendriers qui existent déjà. Différents calendriers ont différentes époques de départ par rapport à la Colombie-Britannique, tels que les calendriers islamiques, chinois et hindous. Plus d'informations à ce sujet est here.Donc, si vous voulez que chaque culture et non pas seulement l'empire romain, vous devrez faire votre propre version de ce qui suit, ou du moins certains d'entre eux:
System.Globalization.Calendar
System.Globalization.EastAsianLunisolarCalendar
System.Globalization.GregorianCalendar
System.Globalization.HebrewCalendar
System.Globalization.HijriCalendar
System.Globalization.JapaneseCalendar
System.Globalization.JulianCalendar
System.Globalization.KoreanCalendar
System.Globalization.PersianCalendar
System.Globalization.TaiwanCalendar
System.Globalization.ThaiBuddhistCalendar
System.Globalization.UmAlQuraCalendar
Bonne chance! Ce serait intéressant de voir comment ça se passe.
Si vous allez plus loin que l'année 1, je ne peux pas imaginer que vous ayez besoin de pièces de date à l'heure/minute/seconde. Ne pouvez-vous pas simplement utiliser des entiers simples enveloppés dans votre propre objet personnalisé? –
Je ne sais pas à l'avance si le jour sera une date moderne exacte ou une année dans le passé. – weiqure
Je veux éviter d'utiliser simplement des entiers enveloppés car il serait difficile de calculer un décalage horaire. Par exemple, si je comptais toujours un mois comme 31 jours, le 30 septembre et le 1er octobre seraient plus éloignés que le 31 août et le 1er septembre. Je le considérerai cependant, je pourrais utiliser un DateTime si la date est moderne. – weiqure