正在将毫秒转换为Date对象



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

Date dateObj = new Date(milli);  

但问题是,在我将毫秒值传递给Date类之前,我的毫秒值中添加了GMT值,添加后,当我打印此日期对象时,我可以看到该日期对象再次将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时间

Date始终处于UTC。没有必要改变这一点。

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

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

TimerTask只是一个任务,而不是它的调度。CCD_ 10接受用于调度的CCD_。Date也在UTC。

如果您是,请尝试我的代码

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);

这对我来说是有效的

您可以尝试使用joda-timeAPI。

Joda Time提供了Java日期和时间类的高质量替代品。该设计允许多个日历系统,同时仍然提供简单的API。"默认"日历是XML使用的ISO8601标准。格里高利、儒略、佛教、科普特、埃塞俄比亚和伊斯兰体系也包括在内,我们欢迎进一步增加。支持类包括时区、持续时间、格式和解析。

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

日期对象只是表示一个时刻。想象一下,你在给另一个大陆的人打电话,然后说"3…2…1…现在!"。"现在"对你们两个来说都是同一时刻,尽管对一个人来说是上午9点,对另一个人来说则是下午4点。

您正在创建一个日期,表示Java纪元(1970年初,GMT)后1385569800000毫秒的时刻。这就是你的"现在",它是固定不变的。然而,转换成文本的外观取决于您要为哪个时区显示它。Java默认使用GMT,如果你冬天在英国,这是正确的,但对于(我猜)印度,你希望它在不同的时区。Laalto的答案向你展示了如何做到这一点。

这是代码,对我来说很有魅力:

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());
}

相关内容

  • 没有找到相关文章

最新更新