/**
* Gets an instance of GMT Calendar.
*
* @return a new <code>Calendar</code> object
*/
public static Calendar getGMTCalendar()
{
return Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.US);
}
/**
* @return The month (eg. Calenday.MAY) value for the date.
*/
public static int getMonth(Date date)
{
Calendar c = getGMTCalendar();
System.out.println("date ::"+date.toString());
c.setTime(date);
int month=c.get(Calendar.MONTH);
System.out.println("date after calendar is set ::"+c.getTime()+",Month="+month);
return c.get(Calendar.MONTH);
}上面是截取的代码I am using.When我尝试检索传递给getMonth()的日期的月份,如下所示
int month=DateUtil.getMonth(日期);(日期为10-01-2010)
我期望的月份是8(0-1月,1-2月...8-9月,9-10月),但我在这里得到的是month=8。我试着调试,发现在getMonth()函数中,当我使用c.setTime( date )设置时间时,日期被设置为09-31-2010,即超过日期的前一天。我正在使用INtellij Idea作为Ide,有人能帮我吗??
发布于 2011-02-23 15:25:58
好了,现在我们得到了真实的数据,问题出在你最初的约会上。
就我个人而言,我发现使用Joda Time诊断这类事情最容易:
import org.joda.time.*;
public class Test {
public static void main(String[] args)
{
DateTime dt = new DateTime(1285871400000L,
DateTimeZone.UTC);
System.out.println(dt);
}
}这肯定会显示UTC中的所有内容。它会打印2010-09-30T18:30:00.000Z。所以你进入日历的时刻是在九月,而不是十月。它为你提供的数据提供了正确的结果,因为你已经指定了GMT时区-你只是没有给它你认为你是的数据。
您需要理解,Date只表示时间上的一个瞬间,与日历系统或时区无关。因此,尽管由于默认时区而打印出了10月1日的日期值,但在ISO日历中,它实际上仍然是UTC在9月30日晚上的时刻。
老实说,如果您可以使用Joda Time而不是内置日历类型,那么您应该...但您仍然需要小心系统默认时区,当您不希望它被应用时。
发布于 2011-02-23 14:24:40
如果您所在的时区具有负偏移量(例如,美国),并将GMT日期设置为一个月的第一天,时间为00:00:00,则本地时间将为前一天(和前一个月)。检查以确保您没有从Calendar对象中检索本地时间。
https://stackoverflow.com/questions/5087610
复制相似问题