java.time
编辑:
我倾向于理解您希望将今天的日期格式化为您的格式,以便与具有相同格式的 UTC (GMT) 中的其他日期时间字符串进行比较。为了比较日期和时间,我建议您比较日期时间对象,而不是字符串。所以有两种选择:
- 解析现有字符串,将其转换为您所在时区的日期,并将其与今天的日期进行比较。
- 将现有字符串解析为一个时间点。与今天的开始日期进行比较。
让我们看看代码中的两个选项。
1.转换为日期并比较日期:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmss.SSSX");
ZoneId zone = ZoneId.systemDefault();
LocalDate today = LocalDate.now(zone);
String gmtString = "20201001220000.000Z";
LocalDate dateFromGmtString = formatter.parse(gmtString, Instant::from)
.atZone(zone)
.toLocalDate();
if (dateFromGmtString.isAfter(today)) {
System.out.println(gmtString + " is in the future");
} else if (dateFromGmtString.isBefore(today)) {
System.out.println(gmtString + " was on a past date");
} else {
System.out.println(gmtString + " is today");
}
输出:
20201001220000.000Z 是过去的日期
2。查找今天的开始日期并比较时间
Instant startOfDay = LocalDate.now(zone).atStartOfDay(zone).toInstant();
String gmtString = "20201001220000.000Z";
Instant timeFromGmtString = formatter.parse(gmtString, Instant::from);
if (timeFromGmtString.isBefore(startOfDay)) {
System.out.println(gmtString + " was on a past date");
} else {
System.out.println(gmtString + " is today or later");
}
20201001220000.000Z 是过去的日期
原答案
您可能会关注以下内容。我建议您使用现代 Java 日期和时间 API java.time 进行日期和时间工作。
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("uuuuMMddHHmmss.SSSX");
String gmtString = "20201001220000.000Z";
Instant instant = sourceFormatter.parse(gmtString, Instant::from);
LocalDate date = instant.atZone(ZoneId.systemDefault()).toLocalDate();
String dayString = date.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(dayString);
当我在欧洲/华沙时区运行代码时,输出是:
20201002
因此,波兰的日期已从格林威治标准时间 10 月 1 日转换为 10 月 2 日。
编辑:
…我怎样才能到午夜?
要开始一天(通常是 00:00):
ZonedDateTime startOfDay = time.atZone(ZoneId.systemDefault())
.truncatedTo(ChronoUnit.DAYS);
System.out.println(startOfDay);
2020-10-02T00:00+02:00[欧洲/华沙]
链接: Oracle tutorial: Date Time 解释如何使用 java.time。