LocalDateTime time = LocalDateTime.now();
System.out.println(time); //2024-01-23T00:37:28.268258300
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String stringTime = f.format(time);
System.out.println(stringTime); //2024-01-23 00:37:28
比如有一个日期是LocalDateTime、LocalDate或LocalTime类型的,想要转为形如2024-01-23 00:37:28,这就叫日期的格式化,格式化后得到的是字符串
上方,HH代表格式化后得到的字符串中的小时是24小时制的,如果写成hh就是12小时制的
为了区分上午还是下午,需要在pettern后添加a,即yyyy-MM-dd HH:mm:ss a
使用yyyy-MM-dd HH:mm:ss
生成的是2024-01-23 12:37:28 上午,为什么是上午而不是AM,因为Java会自动根据当前环境信息自行决定,一般情况,都是中文环境(zh CN),所以生成上午,怎么生成AM?DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a", Locale.ENGLISH)
还有一种方法,在IDEA中修改运行配置,添加虚拟机选项为-Duser.language=en -Duser.country=US
,添加后可以查看环境信息
// 获取当前JVM的默认本地化环境
Locale currentLocale = Locale.getDefault();
// 输出当前的本地化环境信息
System.out.println("Default Locale: " + currentLocale.getLanguage() + "_" + currentLocale.getCountry()); //en_US
注意,LocalDateTime 是Java 8引入的新时间API中的类,而 SimpleDateFormat 是旧版日期/时间API中的类,它无法直接处理 LocalDateTime 类型的对象,如下就是错的
LocalDateTime time = LocalDateTime.now();
System.out.println(time);
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String stringTime = f.format(time);
但是DateTimeFormatter可以处理旧的时间API,但是需要进行多层转化,很麻烦,感兴趣的可以稍微了解一下~
新的时间API:java.time.xxx
旧的时间API:java.util.xxx
从Java 8开始,推荐使用新的日期时间API(java.time),如LocalDateTime、LocalDate、LocalTime等,新API在功能完备性、代码简洁性、线程安全性和国际兼容性等方面均优于旧API,所以被推荐作为开发的新选择,详细原因感兴趣可以自行了解~~
旧的时间API使用示例
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa"); //在旧的中,a和aa都可以,新的只能a
System.out.println(simpleDateFormat.format(date));