UTC时间戳需要保存在java变量中

时间:2018-08-31 07:35:33

标签: timestamp utc

成功发送电子邮件后,来自SMTP2GO的响应以URL编码的形式表示,其时间元素为time=2018-08-30T09%3A22%3A31Z。 我需要将时间保存在Java变量中为2018-08-30 09:22 我怎样才能做到这一点 ;任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

如果时间是一个字符串,则可以执行以下操作:

String[] timeparts = time.split("T");
String[] timeparts2 = timeparts[1].split("%3A");

String result = timeparts[0] + " " + timeparts2[0] + ":" + timeparts2[1];

但是,这不是一个很好的方法。

答案 1 :(得分:0)

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm");
    String urlParam = "time=2018-08-30T09%3A22%3A31Z";
    String[] splitParam = urlParam.split("=");
    if (splitParam.length == 2 && splitParam[0].equals("time")) {
        String incomingTimeString = URLDecoder.decode(splitParam[1], StandardCharsets.UTF_8);
        OffsetDateTime time = OffsetDateTime.parse(incomingTimeString);
        String timeStringForDisplay = time.format(formatter);
        System.out.println(timeStringForDisplay);
    }

上述代码段的输出是理想的:

  

2018-08-30 09:22

请注意,时间是UTC。您可能需要将其转换为用户的时区,或者至少将偏移量与时间一起打印。

执行此操作的漂亮方法是使用URLDecoder将编码后的字符串中的%3A解码为冒号,并使用适当的日期时间类来保存日期和时间,例如{{1 }}或OffsetDateTime(在注释中建议的Instant类是一个糟糕的选择;它早已过时,并且仅设计用于在SQL数据库中存储时间戳值和从中检索时间戳值)。您的时间字符串采用ISO 8601格式,TimestampOffsetDateTime和其他现代日期时间类将其解析为默认格式。这意味着我们不必指定格式。

链接: Oracle tutorial: Date Time解释了如何使用Instant