将 java.sql.Timestamp 转换为 java.util.Calendar ISO 8601 格式

pan*_*nnu 3 java timestamp amazon-dynamodb

我必须存储在更新的时间dynamodb,经历的文档时dynamodb发现,如果我们将其存储在ISO 8601的格式,我们可以建立一个索引,但在应用程序我有java.sql.timestamp。我怎样才能转换它?

Ole*_*.V. 5

时间

第一个答案,不要使用java.sql.Timestamp. 这门课已经过时了。换一个InstantInstant是 中的类之一java.time,现代 Java 日期和时间 API 也称为 JSR 310。该 API 比旧类更易于使用。假设inst是你的Instant

    String iso8601String = inst.toString();
    System.out.println(iso8601String);
Run Code Online (Sandbox Code Playgroud)

在我的电脑上,这只是打印出来的

2017-12-13T11:04:59.282Z
Run Code Online (Sandbox Code Playgroud)

toString现代类的方法生成 ISO 8601 格式,这使您的任务非常容易。

转换您的时间戳

因为(据我所知)您Timestamp从遗留代码中获取对象,而您现在无法升级:首先要做的是将其转换为Instant. 然后你可以按照上面的方法进行。

我假设那ts是你的时间戳。如果您使用的是 Java 8 或更高版本:

    String iso8601String = ts.toInstant().toString();
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Java 6 或 7,则需要获取 ThreeTen Backport(链接如下)。这是 JSR 310 到上述 Java 版本的反向移植。由于在这些版本中,转换方法未内置到Timestamp类中,因此转换发生的方式略有不同,其他一切都相同。我没有测试以下代码行,所以请容忍任何错字。

    String iso8601String = DateTimeUtils.toInstant(ts).toString();
Run Code Online (Sandbox Code Playgroud)

链接


Tim*_*sen 2

我不确定您是否必须在这里进行任何重型手动提升,因为我希望一个好的司机能够处理这个问题。假设您确实需要手动转换为java.sql.timestamp符合 ISO 8601 的字符串,您可以尝试以下操作:

public String getISOTimestamp(java.sql.timestamp ts) {
    Date date = new Date(ts.getTime());
    String pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    String isoTS = sdf.format(date);

    return isoTS;
}
Run Code Online (Sandbox Code Playgroud)