我在GMT中有时间变量,我将转换为UTC。我发布了我的代码..
long mytime = 1376824500000;
Date date = new Date(mytime);
String time = new SimpleDateFormat("HH:mm").format(date);
在某些设备中返回"13:15"
,但我希望始终使用utc日期:"11:15"
。
我怎样才能做到这一点?
谢谢。
答案 0 :(得分:4)
目前尚不清楚您与UTC和GMT之间的期望有何不同 - 出于我们在此讨论的目的,它们是等效的。 (他们在技术上并不完全相同,但......)
就格式而言,您只需在格式化程序上设置时区:
// TODO: Consider setting a locale explicitly
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = format.format(date);
答案 1 :(得分:1)
试试这个:
long mytime = 1376824500000;
Date date = new Date(mytime);
SimpleDateFormat formater = = new SimpleDateFormat("HH:mm");
formater .setTimeZone(TimeZone.getTimeZone("GMT"));
String time formater.format(date);
答案 2 :(得分:0)
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用 java.time
(现代日期时间 API)的解决方案:
import java.time.Instant;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.ofEpochMilli(1_376_824_500_000L);
OffsetDateTime odtUtc = instant.atOffset(ZoneOffset.UTC);
LocalTime time = odtUtc.toLocalTime();
System.out.println(time);
// If you want the time with timezone offset
OffsetTime ot = odtUtc.toOffsetTime();
System.out.println(ot);
}
}
输出:
11:15
11:15Z
输出中的 Z
是零时区偏移的 timezone designator。它代表祖鲁语并指定 Etc/UTC
时区(时区偏移为 +00:00
小时)。
从 Trail: Date Time 了解有关现代 Date-Time API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。