首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Calendar对象检索错误的日期?

Java Calendar对象检索错误的日期?
EN

Stack Overflow用户
提问于 2011-02-23 14:11:56
回答 2查看 3.4K关注 0票数 2
代码语言:javascript
复制
/**
 * 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,有人能帮我吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-23 15:25:58

好了,现在我们得到了真实的数据,问题出在你最初的约会上。

就我个人而言,我发现使用Joda Time诊断这类事情最容易:

代码语言:javascript
复制
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而不是内置日历类型,那么您应该...但您仍然需要小心系统默认时区,当您不希望它被应用时。

票数 3
EN

Stack Overflow用户

发布于 2011-02-23 14:24:40

如果您所在的时区具有负偏移量(例如,美国),并将GMT日期设置为一个月的第一天,时间为00:00:00,则本地时间将为前一天(和前一个月)。检查以确保您没有从Calendar对象中检索本地时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5087610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档