当前位置: 首页 > 工具软件 > jalali > 使用案例 >

java 日期转化器,Java Jalali Calendar的良好日期转换器?

宰父淳
2023-12-01

我在自己的图书馆Time4J中用Java开发了自己的波斯(jalali)日历。 该实现部署了Borkowski算法(至少在公历2129年有效-没有2025错误)。

解决OP具体问题的方法:

// conversion from jalali to gregorian by constructed input

PersianCalendar jalali = PersianCalendar.of(1394, 11, 5);

// or use a safe enum instead of the month number:

// PersianCalendar jalali = PersianCalendar.of(1394, PersianMonth.BAHMAN, 5);

PlainDate gregorian = jalali.transform(PlainDate.class);

System.out.println(gregorian); // 2016-01-25

// conversion to millis-since-unix (timezone-dependent)

Moment moment1 = gregorian.atStartOfDay().inTimezone(ASIA.TEHRAN);

long millisSinceUnix = TemporalType.MILLIS_SINCE_UNIX.from(moment1);

System.out.println(millisSinceUnix); // 1453667400000L

// conversion of millis-since-unix to jalali (timezone-dependent)

Moment moment2 = TemporalType.MILLIS_SINCE_UNIX.translate(millisSinceUnix);

PlainDate gregorian2 = moment2.toZonalTimestamp(ASIA.TEHRAN).toDate();

System.out.println(gregorian2.transform(PersianCalendar.class)); // AP-1394-11-05

// formatting and parsing in Farsi language using full style

ChronoFormatter f1 =

ChronoFormatter.ofStyle(DisplayMode.FULL, new Locale("fa"), PersianCalendar.axis());

System.out.println(f1.format(jalali)); // ه‍.ش. ۱۳۹۴ بهمن ۵, دوشنبه

System.out.println(f1.parse("ه‍.ش. ۱۳۹۴ بهمن ۵, دوشنبه")); // AP-1394-11-05

// formatting in English language using custom pattern

ChronoFormatter f2 =

ChronoFormatter.ofPattern(

"d. MMMM yyyy", PatternType.CLDR, Locale.ENGLISH, PersianCalendar.axis());

System.out.println(f2.format(jalali)); // 5. Bahman 1394

当然,日历提供了更多功能,例如日期算术(添加天或月,计算天,月等中的增量等)或字段/元素操作(轻松进入月份的最后一天等)。

到目前为止,这里建议的其他库的旁注:

库amirmehdizadeh / JalaliCalendar和ICU4J都使用从零开始的月份。 这可能非常令人困惑。 使用amirmehdizadeh的库的非直观示例:

YearMonthDate jalali = new YearMonthDate(1394, 10, 5); // really month 11 (Bahman)

YearMonthDate gregorian = JalaliCalendar.jalaliToGregorian(jalali);

System.out.println(gregorian); // 2016/0/25 => really month 1 (January)

关于国际化,我认为ICU4J在波斯日历方面不比Time4J提供更多,因为后者也基于最新的CLDR版本v28。 实际上,Time4J在波斯语的时代和时代支持大约25种语言(包括波斯语和普什图语)。

 类似资料: