2013-11-27 138 views
0

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

Date dateObj = new Date(milli); 

但问题是,我的毫秒价值在于它加入之前,我把它传递给DateGMT值,加上当我打印此日期对象我可以看到日期对象是在毫秒再次增加GMT值价值,因为我的日期显示为错误。

那么我怎样才能生成Date对象与考虑GMT值在其中。

例如我的毫秒是1385569800000这是越来越打印为如下:

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

但此时戳的不添加GMT电流值:

Wed, 27 Nov 2013 16:30:00 

* UPDAE *

这不仅仅是打印d以正确的格式和正确的日期时间吃饭。
但我想使用该日期对象来安排TimeTask
所以基本上我想创建日期对象具有适当的日期时间值在其中添加额外的GMT时间在其中。

回答

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

A Date始终使用UTC。无需改变这一点。

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

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

TimerTask只是一个任务,而不是它的调度。 Timer接受调度的Date对象。那里的Date也是UTC。

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

您可以尝试joda-time API。

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

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

+0

同意。仅供参考,StackOverflow中的许多答案显示如何切换时区(如'toDateTime'方法),并根据需要使用millis进行操作。如[this](http://stackoverflow.com/a/20257406/642706)和[this](http://stackoverflow.com/a/20255344/642706)。 –

1

一个Date对象,仅表示在某个时刻。想象一下,你正在打电话给另一个大陆上的某个人,并且你说“3 ... 2 ... 1 ...现在!”。对于你们两个人来说,“现在”是相同的时刻,即使对于一个人来说,它已经是上午九点,而对另一个人来说已经是下午四点了。

您正在创建日期,表示Java时代(1970年初,格林威治标准时间)之后1385569800000毫秒的时刻。那是你的“现在”,它是固定不变的。但是,它看起来像转换为文本的内容取决于您想要显示哪个时区。 Java默认使用GMT,如果你在冬季期间在英国,这将是正确的,但对于(我猜测)印度,你希望它在不同的时区。拉尔托的答案告诉你如何做到这一点。