gpt4 book ai didi

java - Calendar.get(Calendar.DAY_OF_MONTH) 返回错误的日期

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:40 29 4
gpt4 key购买 nike

当我运行以下代码时:

int year = 2017;
int month = 7;
int dayOfMonth = 10;

Calendar dateOfBirth = new GregorianCalendar(year, month, dayOfMonth);
dateOfBirth.getTime(); // See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490
dateOfBirth.setTimeZone(TimeZone.getTimeZone("UTC"));

System.out.println("Original Day Of Month:\t\t" + dayOfMonth);
System.out.println("Calendar:\t\t\t" + dateOfBirth);
System.out.println("Calendar substring:\t\t" + dateOfBirth.toString().substring(dateOfBirth.toString().indexOf("DAY_OF_MONTH"), dateOfBirth.toString().indexOf("DAY_OF_MONTH") + 15));
System.out.println("Formatted date:\t\t\t" + new SimpleDateFormat("dd").format(dateOfBirth.getTime()));
System.out.println("get(Calendar.DAY_OF_MONTH):\t" + dateOfBirth.get(Calendar.DAY_OF_MONTH));

我得到这个输出:

Original Day Of Month:      10
Calendar: java.util.GregorianCalendar[time=1502312400000,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=7,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=10,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
Calendar substring: DAY_OF_MONTH=10
Formatted date: 10
get(Calendar.DAY_OF_MONTH): 9

如您所见,dateOfBirth.get(Calendar.DAY_OF_MONTH) 返回的值不正确。

我使用 UTC 是因为它是出生日期,我不希望它依赖于特定时区。为了正确执行此操作,我需要调用 dateOfBirth.getTime() - 请参阅 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490 .如果我取消那个电话,这会正常工作,但随后我会遇到其他错误。

知道我可以做些什么来准确地得到一个月中的正确日期吗?

我使用的是 Java v1.7.0_79,为了以防万一,我目前使用的是 GMT+3。

最佳答案

只需在设置时区后设置日期值:

int year = 2017;
int month = Calendar.JULY;
int dayOfMonth = 10;

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
calendar.set(year, month, dayOfMonth);

System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));

这会正确输出月中的第几天:

DAY_OF_MONTH: 10

关于java - Calendar.get(Calendar.DAY_OF_MONTH) 返回错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44647598/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com