我有以下代码将毫秒转换为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时间。
答案 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系统也包括在内,我们欢迎进一步增加。支持类包括时区,持续时间,格式和解析。
答案 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());
}