Java日期格式“2023年1月25日16:30:22.998”与“2023年1月16日23:59:59.938Z”[重复]

gc0ot86w  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(191)
    • 此问题在此处已有答案**:

What is this date format? 2011-08-12T20:17:46.384Z(11个答案)
昨天关门了。
任何帮助或提示将不胜感激。从下面的代码我得到这个日期:2023 - 01 - 25 16:30:22.998。我怎样才能得到这个日期:"frmdt":"2023 - 01 - 16t23:59:59. 938z"。它有一个"t",我不知道这是什么意思?

java.util.Date tsFrom = new java.util.Date();
    Calendar calFrom = Calendar.getInstance();
    calFrom.setTime(tsFrom);
    calFrom.add(Calendar.YEAR, -1);
    tsFrom.setTime(calFrom.getTime().getTime()); // or
    sqlTSFromDate = new Timestamp(calFrom.getTime().getTime());
    System.out.println("From date:" + sqlTSFromDate);
68de4m5k

68de4m5k1#

TL;医生

OffsetDateTime
        .now( ZoneOffset.UTC )
        .minus( Period.ofYears( 1 ) )
        .toString()

2022年1月27日星期二02:02:36.985475Z

ISO 8601标准

学习用文本表示日期时间值的ISO 8601标准格式。

避免遗留类

永远不要使用遗留类DateCalendarTimestamp,它们有严重的缺陷,是由不了解日期时间处理的人设计的。

* Java时间 *

相反,使用JSR 310中定义的 * java. time * 类。
显然,您希望比UTC中看到的当前时刻早一年。
捕获UTC中的当前时刻。

OffsetDateTime oneYearAgoInUtc = OffsetDateTime.now( ZoneOffset.UTC  );

现在. toString():2023年1月27日星期二02:02:36.985475Z
使用UTC中偏移量为零的日历日期返回一年。首先定义返回的时间量,使用Period表示年-月-日的刻度。

Period p = Period.ofYears( 1 );

然后相减。

OffsetDateTime then = now.minus( p );

然后. toString():2022年1月27日星期二02:02:36.985475Z
看那个code run at Ideone.com
要生成标准ISO 8601格式的文本,只需调用toString。* java. time * 类在生成/解析文本时默认使用ISO 8601格式。

String output = then.toString() ;  // By default, standard ISO 8601 format.

2022年1月27日星期二02:02:36.985475Z
T将年-月-日部分与时-分-秒部分分开。
Z表示相对于UTC的零小时-分钟-秒的偏移量。

oknwwptz

oknwwptz2#

正如一些评论所说,这是一个ISO 8601日期。在Java中,你可以使用SimpleDateFormat解析或编写。最后有Z,确保使用UTC/祖鲁时间。
修改您的代码:

public static String ISO_8601 = "yyyyMMdd'T'HHmmss'Z'";
...

    SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_8601);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    sqlTSFromDate = dateFormat.format(tsFrom)

相关问题