gmt java date_关于日期:以Java获取GMT时间
在Java中,我想获取格林尼治标准时间的当前时间。
我尝试了各种选择,例如:
Date date = new Date();
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
date1 = calendar.getTime();
但是日期总是在我的本地时区解释。
我在做什么错,如何将Java Date转换为GMT?
System.currentTimeMillis(),或仅是新的Date()。 它的格林尼治标准时间已经。
仅供参考,现在麻烦的旧日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)已成为旧版,由Java 8和更高版本中内置的java.time类取代。 请参见Oracle教程。
奇怪的是,您在获取日期方面在后端做了正确的事情,但是没有任何迹象表明您没有花费GMT时间并根据计算机的当前语言环境对其进行格式化。
final Date currentTime = new Date();
final SimpleDateFormat sdf =
new SimpleDateFormat("EEE, MMM d, yyyy hh:mm:ss a z");
// Give it to me in GMT time.
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("GMT time:" + sdf.format(currentTime));
关键是使用您自己的DateFormat,而不是系统提供的日期格式。这样,您可以将DateFormat的时区设置为所需的时间,而不是将其设置为语言环境的时区。
我希望以毫秒为单位的格林尼治标准时间日期有效吗?
long millis = System.currentTimeMillis();将返回自1 January 1970, 00:00:00.000 UTC起经过的毫秒数。 UTC时间是大多数人说" GMT时间"时真正想要的。 java.util.Date具有getTime()方法,该方法对任意Date执行相同的操作。根据您的需要,您可能需要使用java.util.Calendar来构造Date对象,如果是这样的话,则Calendars getTime()方法将返回Date,然后您可以通过getTime()来获取毫秒偏移量。
我不知道为什么没人这样做:
Calendar time = Calendar.getInstance();
time.add(Calendar.MILLISECOND, -time.getTimeZone().getOffset(time.getTimeInMillis()));
Date date = time.getTime();
更新:
由于Java 8,9,10及更高版本,因此应该有Java支持的更好的替代方案。感谢您的评论@humanity
我尝试了几种方法来实现此目的,但只有您的解决方案能完美地工作
这种方法的一个问题是时间序列化时它不会更改时区。
仅供参考,现在麻烦的旧日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleDateFormat)已经成为旧版,被Java 8和更高版本中内置的java.time类取代。请参见Oracle教程。
根据我的经验,Java中捆绑的Calendar和Date类可能产生不必要的效果。
如果您不介意升级到Java 8,请考虑使用ZonedDateTime
像这样:
ZonedDateTime currentDate = ZonedDateTime.now( ZoneOffset.UTC );
TL;博士
Instant.now()
java.time
Damilola的答案在建议您使用Java 8和更高版本中内置的java.time框架方面是正确的。但是那个Answer使用ZonedDateTime类,如果您只想使用UTC而不是任何特定的时区,那就太过分了。
麻烦的旧日期时间类现在已被遗留,由java.time类取代。
Instant
Instant类表示UTC时间轴上的时刻,其分辨率为纳秒(最多十进制的九(9)位数字)。
简单的代码:
Instant instant = Instant.now() ;
instant.toString(): 2016-11-29T23:18:14.604Z
您可以将Instant视为构建块,可以在其中添加时区(ZoneID)以获得ZonedDateTime。
ZoneId z = ZoneId.of("America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
关于java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧式旧式日期时间类,例如java.util.Date,Calendar和SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
在哪里获取java.time类?
Java SE 8和SE 9及更高版本
内置。
标准Java API的一部分,具有捆绑的实现。
Java 9添加了一些次要功能和修复。
Java SE 6和SE 7
java.time的许多功能在ThreeTen-Backport中都被反向移植到Java 6和7。
Android的
ThreeTenABP项目专门针对Android改编了ThreeTen-Backport(如上所述)。
请参阅如何使用…。
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval,YearWeek,YearQuarter等。
在尝试了许多方法之后,我发现,要在GMT上以毫秒为单位,您需要创建两个单独的SimpleDateFormat对象,一个用于在GMT中格式化,而另一个用于解析。
这是代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = new Date();
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dateTime= dateParser.parse(format.format(date));
long gmtMilliSeconds = dateTime.getTime();
这很好。 :)
要在格林尼治标准时间获得毫秒的时间,您需要做的是
long millis = System.currentTimeMillis();
你也可以
long millis = new Date().getTime();
和
long millis =
Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTimeInMillis();
但是这些都是拨打相同电话的低效率方式。
这个答案是不正确的。尝试从长毫秒打印新的Date(millis)= Calendar.getInstance(TimeZone.getTimeZone(" GMT"))。getTimeInMillis();它仍然给出当前时区时间。
@JavaEnthusiast ideone.com/seLqnz给出了格林尼治标准时间,而不管时区如何。
所有这些都给了我当地的时区,而不是格林尼治标准时间。
@ Forseth11这是不正确的。除非您的系统时钟设置不正确,否则它们都是GMT。
@PeterLawrey我的坏。我使用本地时区中的日期格式来显示时间。抱歉。
你不能
首先,您要问不可能的事情。没有老式的Date对象,因为不能具有时区或GMT偏移量。
But the date is always is interpreted in my local time zone.
我想您已经打印了Date或做了其他隐式调用它的方法。我相信这是在您的时区中唯一解释Date的时间。更准确地说,是在JVM的当前默认时区中。另一方面,这是不可避免的。 Date.toString()确实以这种方式运行,它获取了JVM的时区设置,并将其用于呈现要返回的字符串。
你可以用java.time
不过,您不应使用Date。该课程的设计不佳,幸运的是已经过时了。还有java.time,它是代替它的现代Java日期和时间API,它具有一两个用于日期和时间的类,它们与GMT或UTC有偏移。我现在认为GMT和UTC是同义词,严格来说,它们不是。
OffsetDateTime now = OffsetDateTime.now(ZoneOffset.UTC);
System.out.println("Time now in UTC (GMT) is" + now);
当我刚运行此代码段时,输出为:
Time now in UTC (GMT) is 2019-06-17T11:51:38.246188Z
输出的尾随Z表示UTC。
链接
Oracle教程:Date Time说明如何使用java.time。
在timeanddate.com上,格林尼治标准时间与世界标准时间之间的差异。
在Java 8之后,您可能希望获取如下所示的格式化时间:
DateTimeFormatter.ofPattern("HH:mm:ss.SSS").format(LocalTime.now(ZoneId.of("GMT")));
以下有用的Utils方法可通过DST节省在GMT中管理时间:
public static Date convertToGmt(Date date) {
TimeZone tz = TimeZone.getDefault();
Date ret = new Date(date.getTime() - tz.getRawOffset());
// if we are now in DST, back off by the delta. Note that we are checking the GMT date, this is the KEY.
if (tz.inDaylightTime(ret)) {
Date dstDate = new Date(ret.getTime() - tz.getDSTSavings());
// check to make sure we have not crossed back into standard time
// this happens when we are on the cusp of DST (7pm the day before the change for PDT)
if (tz.inDaylightTime(dstDate)) {
ret = dstDate;
}
}
return ret;
}
public static Date convertFromGmt(Date date) {
TimeZone tz = TimeZone.getDefault();
Date ret = new Date(date.getTime() + tz.getRawOffset());
// if we are now in DST, back off by the delta. Note that we are checking the GMT date, this is the KEY.
if (tz.inDaylightTime(ret)) {
Date dstDate = new Date(ret.getTime() + tz.getDSTSavings());
// check to make sure we have not crossed back into standard time
// this happens when we are on the cusp of DST (7pm the day before the change for PDT)
if (tz.inDaylightTime(dstDate)) {
ret = dstDate;
}
}
return ret;
}
java.util.Date已经在UTC中。这段代码对我来说毫无意义。
这非常简单直接。
Date date = new Date();
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
date = cal.getTime();
现在日期将包含当前格林尼治标准时间。
gmt java date_关于日期:以Java获取GMT时间相关推荐
- java获取秒时间_关于java:以秒为单位获取当前时间
有没有办法在几秒钟内获得当天的当前时间? 注意我问的是当天的时间,而不是UTC时间. 我想要的是0到86,400(12:00 AM - 11:59 PM)之间的值(以秒为单位). 我正在开发一个每天工 ...
- Calendar日历类详解【SimpleDateFormat、时区、Date、夏令时、常用方法,日期差、获取当前时间】
Calendar 获取当前时间 SimpleDateFormat 获取年月日等 设置特定时间.时区 日期的计算(加减) 计算日期差 计算某月有几天 Calendar常用方法合集 夏令时是什么 简介: ...
- java如何获取当天日期_Java 中获取当前时间
一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStri ...
- java calendar星期_java 日历 Calendar 获取当前时间是星期几
1.怎样格式化当前时间:格式化是要是想获取几天是今年的第多少天,把"dd"改成"DD"那个位置出现的就是今年的第多少天. Date date = new Dat ...
- java时间戳转换日期格式(java时间戳转换日期格式精确到毫秒)
java中如何实现时间戳和北京时间的互换 public static void main(String[] args) { long times = 1386665666777L; Date date ...
- mysql获取前一天日期_mysql中获取当前时间的前一天
在日志中,经常需要获取当天的或者前一天的数据 当前时间前一天 :SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY); 当天: select * from user wh ...
- mysql日期对应java类型_Mysql与Java日期类型
java中的日期类型 java.util.Date java.util.Calendar java.sql.Date java.sql.Time java.sql.Timestamp 注:后三种都继承 ...
- JAVA获取当前时间并作比较
JAVA获取当前时间并作比较 获取当前时间方法一:通过Util包中的Date获取 获取当前时间方法二:通过Util包的Calendar 获取 获取当前时间方法三:通过Hutool辅助类中日期时间工具- ...
- java int转日期_Java时间日期格式转换
Java时间格式转换大全 import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @ ...
最新文章
- 编程求文件file1中数据的平均值,并将其与平均值最接近的数删除
- 第五天学习Java的笔记(if,switch顺序结构)
- FM,FFM及其实现
- 【离散数学】二元运算的性质
- JAVA中的引用四种引用类型
- Javaspring 14-18课 spring AOP
- 一个web项目web.xml的配置中context-param配置作用
- SQL 数据库基本操作
- 螺旋测微器 flash_Flash 101-第5部分:螺旋式失控
- Java根据信用卡号区分国际常用的五大信用卡卡种:VISA,Master,AE,DC,JCB.
- 对话窗口、面板滚动视图、标签切换视图;QDialog、QScroollArea、
- 什么是长尾关键词?长尾关键词优化方法和技巧
- 用计算机0和1表达难舍之情,表达不舍之情的说说
- ubuntu16.04下ORB_SLAM2的配置
- 计算机组成原理笔记--流水线的扩展(1):数据前推与增加宽度
- 阿里云 验证四要素 服务
- 墙、扫村都不新奇:农村电商新升级
- sqoop的java操作,总结归纳,含代码
- MobSF移动安全检测框架简述
- 博士申请 | 纽约州立大学布法罗分校邹韶峰老师招收强化学习方向全奖博士生...
热门文章
- #边学边记 必修4 高项:对事的管理 第5章 项目成本管理 之 制订成本管理计划
- 高科技引领时尚 甘肃天星独创全球共振迷你音响
- 杀毒软件 防火墙 PHPIDS打造php网站服务器三位一体宙斯盾安防
- 4. 非监督学习与强化学习简介
- 可以自主学习游动的仿生“机械鱼”
- 免费网络营销与推广的几种方法
- matlab中求虚数的模,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
- 如何在windows下安装ray(install Ray under windows)
- 华硕笔记本节能证书_有这本证书的人恭喜啦,国家正式要求,企业必备
- ERP认证是什么 ?