4

谁能告诉一个好方法来检测以字符串形式出现的日期是否为回历格式?任何自动检测字符串日期类型(回历)的好解决方案?

初始工作或想法: 我们可以检查年份从 14 或 13 开始,例如回历年份,例如“1435”。

我知道用于双向转换的 Java JODA API:

//Convert Georgian to Hijri

DateTime dtISO = new DateTime(2014,2,25,0,0,0,0);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance());
String formatIslamic= "dd-MMMM-yyyy";
DateTimeFormatter formatter = DateTimeFormat.forPattern(formatIslamic).withChronology( IslamicChronology.getInstance());
String islamicDateString = formatter.print(dtIslamic);
System.out.println(islamicDateString);

//Convert Hijri to Georgian :

Chronology iso = ISOChronology.getInstanceUTC();
Chronology hijri = IslamicChronology.getInstanceUTC();
DateTime dtHijri = new DateTime(1435,04,24,00,00,hijri); 
DateTime dtIso = new DateTime(dtHijri, iso);
System.out.println(dtIso);
4

1 回答 1

6

据我所知,区分回历日期和公历日期的唯一真正方法是通过提供的年份。对于大多数应用程序,这可能就足够了,但对于其他应用程序来说,它几乎没有用。Hijri 使用日/月/年格式。正如您已经知道的那样,试图区分第 2 个月和第 2 天是没有意义的,因此您可以忘记这一点,但是将回历年与公历年区分开来存在类似的问题......克里斯托弗·哥伦布 (Christopher Columbus) 漂流进来,一脚踩在北美土壤在 1492 年,但在回历中的 1492 是公历中的 2069。

我想这都是建立一套规则的问题。如果代码仅接受回历日期,请确保用户只能提供回历日期,反之亦然以提供公历日期。如果预计回历日期格式并且有人提供 2016 年,那么这显然是错误的,因为回历中的 2016 年实际上是 2577 年。如果你问我,这在未来有点遥远。

用户可以提供多远或多远的日期?格里高利 2016 年与 1437 年的等效回历(相差 579 年)之间的差异足够大,您可以对实际提供的日期格式建立自信的解释并进行必要的转换。然而,话虽如此,一个应用程序可以接受的内容可能无法为另一个应用程序接受。

于 2016-01-19T15:31:42.173 回答