我有以下方法将我的自定义DMY (日期,月,年)对象转换为日期。
public static Date serverCreateDateFromDMY(DMY pDMY, TimeZone pTimeZone)
{
Calendar vCalendar = Calendar.getInstance(pTimeZone);
vCalendar.set(Calendar.YEAR, pDMY.getYear());
// Below line is because DMY month counts are 1-indexed
// and Date month counts are 0-indexed
vCalendar.set(Calendar.MONTH, pDMY.getMonthOfYear() - 1);
vCalendar.set(Calendar.DAY_OF_MONTH, pDMY.getDayOfMonth());
System.out.println(vCalendar.getTime());
TimeUtilsServer.zeroCalendarHoursAndBelow(vCalendar);
System.out.println(vCalendar.getTime());
return vCalendar.getTime();
}
public static void zeroCalendarHoursAndBelow(Calendar pToZero)
{
pToZero.set(Calendar.HOUR_OF_DAY, 0);
pToZero.set(Calendar.MINUTE, 0);
pToZero.set(Calendar.SECOND, 0);
pToZero.set(Calendar.MILLISECOND, 0);
}向serverCreateDateFromDMY()方法传递以下参数: DMY=20120424,TimeZone为: America/New_York。应用程序在我的IST时区本地运行。
根据上述输入,打印以下输出。
Tue Apr 24 14:43:07 IST 2012
Tue Apr 24 09:30:00 IST 2012所以正如你所看到的,在最后一次输出中,时间没有被归零。有什么建议吗?
@Marko,是的,我开始了解DateFormat,并尝试了下面的例子。但静态日期打印的是时间,而不是归零。
TimeZone tz = TimeZone.getTimeZone("America/New_York");
Calendar vCalendar = Calendar.getInstance(tz);
vCalendar.set(Calendar.YEAR, 2012);
vCalendar.set(Calendar.MONTH, 4 - 1);
vCalendar.set(Calendar.DAY_OF_MONTH, 24);
DateFormat df = DateFormat.getDateTimeInstance();
df.setTimeZone(tz);
System.out.println(df.format(vCalendar.getTime()));
vCalendar.set(Calendar.HOUR_OF_DAY, vCalendar.getActualMinimum(Calendar.HOUR_OF_DAY));
vCalendar.set(Calendar.MINUTE, vCalendar.getActualMinimum(Calendar.MINUTE));
vCalendar.set(Calendar.SECOND, vCalendar.getActualMinimum(Calendar.SECOND));
vCalendar.set(Calendar.MILLISECOND, vCalendar.getActualMinimum(Calendar.MILLISECOND));
System.out.println(df.format(vCalendar.getTime()));发布于 2012-04-24 17:55:28
..。你比纽约时间早了9:30。您将时间设置为午夜NY时间,并将其读出为您所在区域的时间。请注意,getTime返回一个Date,它不是时区可配置的。如果要指定打印结果的时区,则需要使用DateFormat。
发布于 2012-04-24 17:44:30
java Date / Time API从创建之日起就有一个糟糕的设计。也许你应该看看一些库--例如这个隐藏了JDK API缺陷的库-- http://joda-time.sourceforge.net/
发布于 2012-04-24 17:58:15
在内部,Date和Calendar对象以UTC格式存储。当您将字段设置为0时,日历将以UTC更新。
当你向Calendar询问时间时,它会将日期转换为你想要的时区,因此产生了差异。
https://stackoverflow.com/questions/10295311
复制相似问题