刚才,我在我的库Time4J中发布了另一个希伯来日历的实现。从公历日期到Hebrew date(作为对象或格式化字符串)的转换示例:PlainDate gregorian = PlainDate.nowInSystemTime();
HebrewCalendar hebrew = gregorian.transform(HebrewCalendar.axis());
System.out.println(hebrew.toString()); // AM-5778-KISLEV-09
ChronoFormatter hfFull =
ChronoFormatter.ofGenericCalendarStyle(
DisplayMode.FULL,
Locale.forLanguageTag("en-US-u-ca-hebrew")
);
System.out.println(hfFull.format(gregorian)); // Monday, 9 Kislev 5778
国际化基于与ICU4J相同的i18n数据(实际上是CLDR-v32)。当然,希伯来语也是可能的。在
^{pr2}$
最后两个格式化示例展示了如何支持两种不同的希伯来月份编号方式,如果需要月份的数字输出。在
注意:实际时间的转换也取决于时钟时间,因为希伯来语的一天从日落开始。在上面的例子中,改变一天的时间仅仅是前一天的下午6点(simplified view)。如果您想考虑真实的日落,那么只要指定地理位置,您可以按以下方式进行:SolarTime jerusalem = SolarTime.ofJerusalem();
HebrewCalendar currentHebrewDate =
SystemClock.currentMoment().toGeneralTimestamp(
HebrewCalendar.axis(),
Timezone.ofSystem().getID(),
StartOfDay.definedBy(jerusalem.sunset())
).toDate();