2

我编写了以下代码以从 unix 时间戳获取 GMT 日期

private Date converToDate(String unixTimeStamp)
{
    //unix timestamps have GMT time zone.
    DateFormat gmtFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
    gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

    //date obtained here is in IST on my system which needs to be converted into GMT.
    Date time = new Date(Long.valueOf(unixTimeStamp) * 1000);

    String result = gmtFormat.format(time);

    return lineToDate(result, true);
}

此代码在执行时有

Mon May 27 02:57:32 IST 2013 

日期变量中的值和

Sun May 26 21:27:32 GMT 2013

在结果变量中,如何将结果变量中的值直接获取到日期变量中?

4

2 回答 2

4

从概念上讲,这就是问题所在:

//date obtained here is in IST on my system which needs to be converted into GMT.
Date time = new Date(Long.valueOf(unixTimeStamp) * 1000);

ADate没有区。这是你想要的值。当您调用toString()它时将其转换为您的本地时区这一事实与它实际代表的值无关。ADate只是自 Unix 纪元(1970 年 1 月 1 日,UTC 午夜)以来的毫秒数所以你的整个方法可以是:

private static Date convertToDate(String unixTimeStamp)
{
    return new Date(Long.valueOf(unixTimeStamp) * 1000);
}

您不需要任何类型的格式化程序,因为您并没有真正尝试获得文本表示。

如果可以的话,我建议您使用Joda Time进行日期/时间工作,顺便说一下 - 这是一个更清洁的 API。

于 2013-06-02T07:43:55.207 回答
3

Date 只是 long 的包装器,其中包含若干毫秒。

您看到的是toString()Date 对象的默认表示,它使用您的默认时区 (IST) 将日期转换为可读字符串。如果您希望使用 GMT 时区将日期表示为字符串,只需执行您所做的操作:使用带有 GMT 时区的日期格式。

Date 对象代表通用时间线上的一个瞬间,并且没有任何时区。

于 2013-06-02T07:43:34.283 回答