如何使用Java中的UTC或GMT获取当前日期和时间?

当我创建一个新的Date对象时,它被初始化为当前时间,但是在本地时区。 如何获取格林尼治标准时间的当前日期和时间?


#1楼

您可以直接使用

SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");

#2楼

如果您希望Date对象的字段经过UTC调整,则可以使用Joda Time这样操作

import org.joda.time.DateTimeZone;
import java.util.Date;

...

Date local = new Date();
System.out.println("Local: " + local);
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
System.out.println("UTC: " + new Date(utc));

#3楼

以下是获取GMT时间戳记对象的另一种建议:

import java.sql.Timestamp;
import java.util.Calendar;

...

private static Timestamp getGMT() {
   Calendar cal = Calendar.getInstance();
   return new Timestamp(cal.getTimeInMillis()
                       -cal.get(Calendar.ZONE_OFFSET)
                       -cal.get(Calendar.DST_OFFSET));
}

#4楼

只是为了简化操作,要在UTC创建Date ,您可以使用Calendar

Calendar.getInstance(TimeZone.getTimeZone("UTC"));

它将使用“ UTC” TimeZoneCalendar构造一个新实例。

如果您需要该日历中的Date对象,则可以使用getTime()


#5楼

乔恩·斯凯特(Jon Skeet)的回答似乎不正确。 他说:

java.util.Date始终使用UTC。 是什么让您认为这是当地时间? 我怀疑问题在于您是通过使用本地时区的Calendar实例显示它,还是可能使用也使用本地时区的Date.toString()来显示它。

但是,代码:

System.out.println(new java.util.Date().getHours() + " hours");

完全不使用CalendarSimpleDateFormat给出本地时间,而不是GMT(UTC小时)。

这就是为什么似乎不正确的原因。

将响应汇总在一起,代码为:

System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
                           .get(Calendar.HOUR_OF_DAY) + " Hours");

显示的是GMT小时而不是本地时间-请注意,缺少getTime.getHours() ,因为这会创建一个Date()对象,该对象理论上将日期存储在GMT中,但会返回本地时区中的小时数。


#6楼

这是获取String格式的GMT时间的另一种方法

String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z" ;
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String dateTimeString =  sdf.format(new Date());

#7楼

简单地说。 日历对象存储有关时区的信息,但是当您执行cal.getTime()时,时区信息将丢失。 因此,对于时区转换,我建议使用DateFormat类...


#8楼

这对我有用,返回格林尼治标准时间的时间戳!

    Date currDate;
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
    SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

    long currTime = 0;
    try {

        currDate = dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
        currTime = currDate.getTime();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

#9楼

这适用于在Android中获取UTC毫秒。

Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);  
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;

#10楼

此代码显示当前时间UTC。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;


public class Test
{
    public static void main(final String[] args) throws ParseException
    {
        final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        f.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(f.format(new Date()));
    }
}

结果

2013-10-26 14:37:48 UTC

#11楼

tl; dr

Instant.now()   // Capture the current moment in UTC. 

生成一个字符串来表示该值:

Instant.now().toString()  

2016-09-13T23:30:52.123Z

细节

正如乔恩·斯基特(Jon Skeet)的正确回答所指出的那样,java.util.Date对象没有时区 。 但是,它的toStr

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值