我有这个开始日期时间:“ 20201023T200457Z”(似乎是UTC0000) 如何在移动设备上使用本地时间的“ yyyyMMdd HH:mm:ss”模式转换/生成它?
我得到这个结果:星期五十月23 20:04:57 GMT + 02:00 2020 使用以下代码:
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.getDefault());
Date startGMTInput = df.parse(start);
Log.e(TAG, "start: " + startGMTInput.toString());// -> Fri Oct 23 20:04:57 GMT+02:00 2020
但是我的目标是:2020-10-23 22:04:57 //因为我处于GMT + 2时区
答案 0 :(得分:1)
考虑使用java.time(现代Java日期和时间API)进行日期和时间工作。首先定义所需的格式化程序:
private static final DateTimeFormatter inputFormatter
= DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmssX");
private static final DateTimeFormatter outputFormatter
= DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss");
(DateTimeFormatter
是线程安全的,因此我们可以安全地将它们声明为静态。)明确进行时区转换:
String startString = "20201023T200457Z";
Instant start = inputFormatter.parse(startString, Instant.FROM);
String target = start.atZone(ZoneId.systemDefault()).format(outputFormatter);
System.out.println(target);
在我的时区中输出(当前与您所在的时区+02:00偏移):
20201023 22:04:57
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
Instant::from
而不是常量Instant.FROM
。org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 1 :(得分:0)
在进行任何日期操作之前,将您的时区设置为GMT + 2。
isoFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));