成功发送电子邮件后,来自SMTP2GO的响应以URL编码的形式表示,其时间元素为time=2018-08-30T09%3A22%3A31Z
。
我需要将时间保存在Java变量中为2018-08-30 09:22
我怎样才能做到这一点 ;任何帮助将不胜感激!
答案 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格式,Timestamp
,OffsetDateTime
和其他现代日期时间类将其解析为默认格式。这意味着我们不必指定格式。
链接: Oracle tutorial: Date Time解释了如何使用Instant
。