new gregorian create convertir java date localization calendar

gregorian - set date java



¿Un buen convertidor de fechas para Jalali Calendar en Java? (6)

Desarrollé mi propio calendario persa (jalali) en Java dentro de mi biblioteca Time4J . La implementación despliega el algoritmo de Borkowski (válido al menos hasta el año gregoriano 2129 - no 2025-error).

Solución para el problema concreto de 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<PersianCalendar> 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<PersianCalendar> f2 = ChronoFormatter.ofPattern( "d. MMMM yyyy", PatternType.CLDR, Locale.ENGLISH, PersianCalendar.axis()); System.out.println(f2.format(jalali)); // 5. Bahman 1394

Por supuesto, el calendario ofrece más funciones como la aritmética de fechas (agregando días o meses, calculando el delta en días, meses, etc.) o manipulaciones de campos / elementos (fácil para el último día del mes, etc.).

Notas al margen sobre otras bibliotecas propuestas aquí hasta el momento:

Las bibliotecas amirmehdizadeh / JalaliCalendar e ICU4J usan meses basados ​​en cero . Esto puede ser extremadamente confuso. Ejemplo no intuitivo usando la biblioteca de 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)

Acerca de la internacionalización , no creo que ICU4J ofrezca más que Time4J en el área del calendario persa, ya que este último también se basa en la versión más nueva de CLDR v28. Time4J en realidad admite alrededor de 25 idiomas para los meses y eras persas (incluidos el farsi y el pashto).

Estoy desarrollando una aplicación Java y tengo una timeStamp (en Long ). Puedo usar este código fácilmente para cambiarlo a una fecha gregoriana:

Calendar calendar=Calendar.getInstance(); calendar.setTimeInMillis(timeStamp);

Pero necesito tener la fecha en el calendario de Jalali. Busqué pero no encontré ninguna buena biblioteca. ¿Conoces una biblioteca fiable y buena para convertir (o crear fechas en formato timeStamp )? No necesito su implementación o un algoritmo, porque este problema es demasiado problemático y tiene muchas reglas, necesito una solución confiable

Gracias.




Para una mejor localización y soporte de idiomas, a menudo es conveniente usar la biblioteca ICU (International Components for Unicode) de IBM.

Las API son similares a las API Java estándar, pero agregan soporte adicional para la localización e internacionalización (por ejemplo, problemas de tiempo y calendario, clasificación, reglas de formato y una implementación de expresión regular con la compatibilidad adecuada con Unicode).

Para crear un calendario persa y dar salida a la fecha formateada en farsi, por ejemplo, haría algo como esto:

import com.ibm.icu.text.DateFormat; import com.ibm.icu.util.Calendar; import com.ibm.icu.util.ULocale; ... ULocale locale = new ULocale("fa_IR@calendar=persian"); Calendar calendar = Calendar.getInstance(locale); DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, locale); System.out.println(df.format(calendar));

Esto dará como resultado:

چهارشنبه 10 اردیبهشت 1393 ه.ش.



Puede usar JalCal que JalCal (persa) Calender Convertor en Java:

<dependency> <groupId>com.github.sbahmani</groupId> <artifactId>jalcal</artifactId> <version>1.0</version> </dependency>

1. Jalali a Gregorian

Calendar expected4 = Calendar.getInstance(TimeZone.getDefault()); expected4.set(2014, 7, 5, 1, 23, 1); assertThat(JalCal.jalaliToGregorian(1393, 5, 14, 1, 23, 1).toString()).isEqualTo(expected4.getTime().toString());

2. Gregorian a Jalali

Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 5); cal.set(Calendar.MONTH, 6); cal.set(Calendar.YEAR, 2014); cal.set(Calendar.HOUR_OF_DAY, 10); cal.set(Calendar.MINUTE, 25); cal.set(Calendar.SECOND, 1); cal.set(Calendar.MILLISECOND, 0); assertThat(JalCal.gregorianToJalali(cal.getTime(), true)).isEqualTo("14/04/1393 10:25:01"); assertThat(JalCal.gregorianToJalali(new Date(1426883400000l), true)).isEqualTo("01/01/1394 00:00:00");