LocalDate使用ISO日历系统,这是公历。
Java Date-Time API还支持其他日历,例如泰国佛教日历,Hijrah日历,Minguo日历和日历。
非ISO日历相关类在java.time.chrono包中定义。
对于每个可用的非ISO日历系统,有一个自定义的年表和自定义的Date类。
自定义的Chronology类表示日历系统,而自定义的Date类表示自定义日历系统中的日期。
每个自定义Chronology类都包含一个INSTANCE常量,表示该类的单例实例。
以下代码显示获取泰国佛教日历中的当前日期:
import java.time.chrono.ThaiBuddhistChronology; import java.time.chrono.ThaiBuddhistDate; public class Main { public static void main(String[] args) { ThaiBuddhistChronology thaiBuddhistChrono = ThaiBuddhistChronology.INSTANCE; ThaiBuddhistDate now = thaiBuddhistChrono.dateNow(); ThaiBuddhistDate now2 = ThaiBuddhistDate.now(); System.out.println("Current Date in Thai Buddhist: " + now); System.out.println("Current Date in Thai Buddhist: " + now2); } }
上面的代码生成以下结果。
我们可以使用 from()
方法将日历系统中的日期转换为另一个日历系统。
以下代码显示如何将ISO日期转换为泰语佛教日期,反之亦然。
import java.time.LocalDate; import java.time.chrono.ThaiBuddhistDate; public class Main { public static void main(String[] args) { ThaiBuddhistDate thaiBuddhistNow = ThaiBuddhistDate.now(); LocalDate isoNow = LocalDate.now(); System.out.println("Thai Buddhist Current Date: " + thaiBuddhistNow); System.out.println("ISO Current Date: " + isoNow); // Convert Thai Buddhist date to ISO date and vice versa ThaiBuddhistDate thaiBuddhistNow2 = ThaiBuddhistDate.from(isoNow); LocalDate isoNow2 = LocalDate.from(thaiBuddhistNow); System.out.println("Thai Buddhist Current Date from ISO: " + thaiBuddhistNow2); System.out.println("ISO Current Date from Thai Buddhist: " + isoNow2); } }
上面的代码生成以下结果。
以下代码显示如何将日期转换为不同的日期系统。
import java.time.*; import java.time.chrono.*; import java.time.format.*; import java.time.temporal.*; import java.util.Locale; import java.io.PrintStream; public class Main { public static String toString(LocalDate localDate, Chronology chrono) { if (localDate != null) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); ChronoLocalDate cDate; if (chrono == null) { chrono = IsoChronology.INSTANCE; } try { cDate = chrono.date(localDate); } catch (DateTimeException ex) { System.err.println(ex); chrono = IsoChronology.INSTANCE; cDate = localDate; } String pattern = "M/d/yyyy GGGGG"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern); return dateFormatter.format(cDate); } else { return ""; } } public static LocalDate fromString(String text, Chronology chrono) { if (text != null && !text.isEmpty()) { Locale locale = Locale.getDefault(Locale.Category.FORMAT); if (chrono == null) { chrono = IsoChronology.INSTANCE; } String pattern = "M/d/yyyy GGGGG"; DateTimeFormatter df = new DateTimeFormatterBuilder().parseLenient() .appendPattern(pattern).toFormatter().withChronology(chrono) .withDecimalStyle(DecimalStyle.of(locale)); TemporalAccessor temporal = df.parse(text); ChronoLocalDate cDate = chrono.date(temporal); return LocalDate.from(cDate); } return null; } public static void main(String[] args) { LocalDate date = LocalDate.of(1996, Month.OCTOBER, 29); System.out.printf("%s%n", toString(date, JapaneseChronology.INSTANCE)); System.out.printf("%s%n", toString(date, MinguoChronology.INSTANCE)); System.out.printf("%s%n", toString(date, ThaiBuddhistChronology.INSTANCE)); System.out.printf("%s%n", toString(date, HijrahChronology.INSTANCE)); System.out.printf("%s%n", fromString("10/29/0008 H", JapaneseChronology.INSTANCE)); System.out.printf("%s%n", fromString("10/29/0085 1", MinguoChronology.INSTANCE)); System.out.printf("%s%n", fromString("10/29/2539 B.E.", ThaiBuddhistChronology.INSTANCE)); System.out.printf("%s%n", fromString("6/16/1417 1", HijrahChronology.INSTANCE)); } }
上面的代码生成以下结果。
Java流 -Java流分区分区是分组的一种特殊情况。分组数据基于从函数返回的键。可能有很多组。分区仅处理基于谓词的两个组。评估为...
Java IO教程 -Java标准输入/输出/错误流我们可以使用System.out和System.err对象引用,只要我们可以使用OutputStream对象。我们...
Java IO教程 -Java Zip字节数组校验和Java在java.util.zip包中提供了一个Adler32类来计算数据字节的Adler-32校验和。我们需要调...
JavaFX教程 -JavaFX气泡图气泡图是一个双轴图表,为一系列数据点绘制气泡。创建气泡图要创建气泡图,我们创建BubbleChart类,定...
Java脚本教程 -Java脚本eval ScriptEngine 可以在 String 和java.io.Reader中执行脚本。通过使用Reader,我们可以在网络或文件中...