将毫秒转换为Date对象

时间:2013-11-27 13:00:23

标签: android date timezone

我有以下代码将毫秒转换为Android Date对象。

Date dateObj = new Date(milli);  

但问题是我的毫秒值在我传递给GMT类之前添加了Date值,当我打印这个日期对象时添加我可以看到日期对象再次添加GMT以毫秒为单位的值,因此我的日期显示为错误。

那么如何在不考虑GMT值的情况下生成Date个对象。

例如,我的毫秒是1385569800000,其打印如下:

Wed, 27 Nov 2013 22:00:00  --> +5.30

但是没有添加GMT的时间戳的当前值是:

Wed, 27 Nov 2013 16:30:00  

* UPDAE *

这不仅仅是以正确的格式和正确的日期时间打印日期 但我想使用该日期对象来安排TimeTask 所以基本上我想创建Date对象,其中包含正确的日期时间值,而不添加额外的GMT时间。

5 个答案:

答案 0 :(得分:2)

Date始终为UTC。无需改变它。

打印日期值时,在格式化输出字符串之前,请使用SimpleDateFormat并在其上调用setTimeZone()

  

不仅仅是以正确的格式和正确的日期时间打印日期。   但我想使用该日期对象来安排TimeTask。

TimerTask只是一项任务,而不是它的安排。 Timer接受Date对象进行计划。 Date也在UTC中。

答案 1 :(得分:1)

如果你是

,请尝试我的代码
long currentTime = System.currentTimeMillis();
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis());

currentTime -= offsetInMillis;
Date date = new Date(currentTime);

这对我有用

答案 2 :(得分:1)

您可以尝试 joda-time API。

Joda-Time为Java日期和时间类提供了高质量的替代品。该设计允许多个日历系统,同时仍提供简单的API。 “默认”日历是XML使用的ISO8601标准。 Gregorian,Julian,Buddhist,Coptic,Ethiopic和Islamic系统也包括在内,我们欢迎进一步增加。支持类包括时区,持续时间,格式和解析。

http://joda-time.sourceforge.net/key_instant.html

答案 3 :(得分:1)

Date对象只代表一个时刻。想象一下,你正打电话给另一个大陆上的某个人,你说“3 ...... 2 ...... 1 ......现在!”。那个“现在”对你们两个人来说都是同一时刻,即使一个人是上午9点,另一个人下午4点。

您正在创建一个日期,表示Java纪元(1970年初,GMT)之后1385569800000毫秒的时刻。这就是你的“现在”,它是固定不变的。然而,它看起来像转换成文本取决于您想要显示它的时区。 Java默认使用GMT,如果你在冬天在英国,这是正确的,但是(我猜)印度你想要它在不同的时区。拉尔托的答案告诉你如何做到这一点。

答案 4 :(得分:0)

这是代码,对我来说就像魅力一样:

public static String getDate(long milliSeconds, String dateFormat)
{
    // Create a DateFormatter object for displaying date in specified format.
    DateFormat formatter = new SimpleDateFormat(dateFormat);

    // Create a calendar object that will convert the date and time value in milliseconds to date. 
     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(milliSeconds);
     return formatter.format(calendar.getTime());
}