我有以下代码将毫秒转换为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
您正在创建一个日期,表示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());
}