当我创建一个新的Date对象时,它被初始化为当前时间,但在本地时区。如何获得当前的GMT日期和时间?
当前回答
你可以直接用这个
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");
其他回答
当我需要输出一个Date对象时,这就是我这样做的方式,通常情况下,您需要在SQL数据库中保存一个日期,而我希望它是UTC。我只是减去当地时区的偏移时间。
ZonedDateTime now = ZonedDateTime.now();
Date nowUTC = new Date(1000 * (now.toEpochSecond() - now.getOffset().getTotalSeconds()));
- - -更新 巴兹尔建议用一种更清洁的方式来达到同样的效果
Date nowUTC = Date.from(ZonedDateTime.now().toInstant());
但是在非utc java系统环境中测试后,我看到结果并不相同。根据巴兹尔的代码,日期仍然在本地区域
你可以使用的简单函数:
编辑:这个版本使用现代java。时间类。
private static final DateTimeFormatter FORMATTER
= DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss z");
public static String getUtcDateTime() {
return ZonedDateTime.now(ZoneId.of("Etc/UTC")).format(FORMATTER);
}
方法返回值:
26-03-2022 17:38:55 UTC
最初的功能:
public String getUTC_DateTime() {
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z");
dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));//gmt
return dateTimeFormat.format(new Date());
}
以上函数返回:
26-03-2022 08:07:21 UTC
以下是乔恩·斯基特的回答中似乎不正确的地方。他说:
date始终使用UTC。你凭什么认为它是本地的 时间吗?我怀疑问题在于您通过 使用本地时区的Calendar实例,或者可能使用 Date.toString(),它也使用本地时区。
然而,代码:
System.out.println(new java.util.Date().getHours() + " hours");
给出的是本地时间,而不是GMT (UTC)时间,完全没有使用Calendar和SimpleDateFormat。
这就是为什么看起来有些事情是不正确的。
把这些回答放在一起,代码如下:
System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
.get(Calendar.HOUR_OF_DAY) + " Hours");
显示GMT时间而不是本地时间——请注意,getTime.getHours()缺失,因为这将创建一个Date()对象,该对象理论上以GMT存储日期,但返回本地时区的小时。
其实不是时间,而是它的表现形式可以改变。
SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
地球上任何地方的时间都是一样的,但我们对时间的感知可能会因地点的不同而不同。
为了简单起见,你可以使用Calendar来创建一个UTC Date:
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
它将使用“UTC”时区为Calendar构造一个新实例。
如果需要该日历中的Date对象,可以使用getTime()。
推荐文章
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- 是否有可能更新一个本地化的故事板的字符串?
- Java:路径vs文件
- ExecutorService,如何等待所有任务完成
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- Maven依赖Servlet 3.0 API?
- 如何在IntelliJ IDEA中添加目录到应用程序运行概要文件中的类路径?
- getter和setter是糟糕的设计吗?相互矛盾的建议
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?
- Intellij IDEA上的System.out.println()快捷方式
- 使用Spring RestTemplate获取JSON对象列表
- Spring JPA选择特定的列
- URLEncoder不能翻译空格字符