gpt4 book ai didi

java - 无法正确使用 Java 日期函数

转载 作者:行者123 更新时间:2023-11-30 02:10:31 25 4
gpt4 key购买 nike

如果我从申请中获取当前日期,它会出现如下变化:

场景 1:当日期小于该月的 10 号时,一个月小于该年的 10 号 --> 例如:5/9/18
场景 2:当日期 >= 每月 10 号时,一个月小于 >= 一年中的 10 --> 示例:10/11/18

注意:所有示例均采用MM/DD/YY格式,时区为美国

Calendar cal = Calendar.getInstance();   
cal.add(Calendar.DATE,-2);
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yy HH:mm a");
String PastDate = dateFormat.format(cal.getTime());
info("Date is displayed as : "+ PastDate );

当场景 1 到位时,上面的代码会抛出错误。但是,如果我将日期时间格式设置为“M/d/yy H:mm a”,则它适用于这两种情况。我还需要添加日期。

使用第二种格式是一个好的做法吗?或者有其他方法可以完成它。请高手指点..

最佳答案

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
.withLocale(Locale.US);
ZonedDateTime dayBeforeYesterday = ZonedDateTime.now(ZoneId.of("America/St_Thomas"))
.minusDays(2);
System.out.println(dayBeforeYesterday.format(formatter));

刚才运行我得到了这个输出:

5/7/18, 8:44 AM

请指定您想要的时区,我把 America/St_Thomas 放在其中。在使用 ZoneId.systemDefault() 作为 JVM 时区设置之前请三思,因为该设置可能随时因程序的其他部分或同一 JVM 中运行的其他程序而更改;但如果您相信该设置反射(reflect)了用户的时区,那么使用它就是正确的。

与其定义自己的输出格式,不如使用从 DateTimeFormatter.ofLocalizedDateTime 获得的内置格式之一。请指定区域设置(无论您使用内置格式还是自己创建)。如果您相信 JVM 的设置是正确的,请再次使用 Locale.getDefault()

避免使用旧的日期和时间类,例如 CalendarDateFormatSimpleDateFormat。它们不仅早已过时,而且设计也很糟糕,最后两个尤其麻烦。今天,我们拥有更好的现代 Java 日期和时间 API java.time

链接: Oracle tutorial: Date Time解释如何使用java.time

关于java - 无法正确使用 Java 日期函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com