Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造日期时出错_Java_Android_Date_Calendar - Fatal编程技术网

Java 构造日期时出错

Java 构造日期时出错,java,android,date,calendar,Java,Android,Date,Calendar,我有这样的代码: Log.d(TAG, "day=%d, month=%d, year=%s", day, month, year); Calendar c = Calendar.getInstance(); c.clear(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.DAY_OF_MONTH, day); Log.i(TAG, "Date is parsed to %tF", c.g

我有这样的代码:

Log.d(TAG, "day=%d, month=%d, year=%s", day, month, year);

Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);

Log.i(TAG, "Date is parsed to %tF", c.getTime(), c.get(Calendar.DAY_OF_MONTH));
这是我执行时得到的日志:

day=11, month=11, year=1985
Date is parsed to 1985-12-10
day=1, month=0, year=2012
Date is parsed to 2012-01-01

day=25, month=11, year=2011
Date is parsed to 2011-12-25

day=4, month=10, year=1979
Date is parsed to 1979-11-03

day=3, month=11, year=1984
Date is parsed to 1984-12-02
为什么不是1985-12-11?它在某些日期或调试模式下正常工作。但为什么它不总是起作用呢

在处理日期和通过SimpleDataFormat从字符串解析日期时,我也有类似的问题

编辑:执行此代码的其他示例:

day=11, month=11, year=1985
Date is parsed to 1985-12-10
day=1, month=0, year=2012
Date is parsed to 2012-01-01

day=25, month=11, year=2011
Date is parsed to 2011-12-25

day=4, month=10, year=1979
Date is parsed to 1979-11-03

day=3, month=11, year=1984
Date is parsed to 1984-12-02

无法从其他线程更改日期、月份和年份。

日历中的月份以零为基础。请看这里:

我建议你读一下:


如果可以的话,它实际上更容易使用,更不容易出现bug——它有一个更整洁、更安全的API。

月是0-11,天从1开始

一天

编辑:

输出:

12/11/1985
试试这个:

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
SimpleDateFormat simpleDateFormat =
        new SimpleDateFormat("MM-dd-yyyy"); 
Log.v("the date is:", simepleDateFormat.format(c.getTime());

谢谢你的帮助。这似乎是一些安卓设备的问题。它出现在5台设备中的3台。我通过指定时间来修正它

c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 30);

您能显示您的年、月和日变量的初始化位置吗?它们已在上面初始化。没关系。它们是int值,它们的值是loggeddon告诉我这不重要。当然,当您获得意外的输出时,它很重要。
是否被其他线程更改?你说它对某些约会有效?!哪些日期有效,哪些日期无效?也许到时候我们就能知道你的问题属于哪里了。@darja我很困惑。有什么问题吗?如前所述,月份以0为基础!投票否决一个答案并不好,即使它不完整。我没有看到月日issue@Eran我没有投反对票,但这不是对这里提出的问题的回答。如果你仔细阅读这个问题,那么它既不是一个不完整的答案,也不是一个完整的答案。OP显然对这个月一点也不恼火。OP只是对每月的哪一天感到困惑。但是+1提到乔达时间…@darja因为你做得不对。像瓦纳西那样做,你就得到了。我不需要格式化。我需要正确的价值观。这段代码也不起作用。@darja如果上面的代码不起作用,请提供更多信息。@darja我希望您在这段代码上也有同样的问题,因为它与您的代码基本相同。请参阅我对您可以提供的其他信息的评论。当您显式使用
new GregorianCalendar()
而不是
Calendar.getInstance()
时,会有什么不同吗?您确定这不是时区问题吗?可能是夏令时问题,而不是时区问题。它解释了一些事情,但不是为什么12月25日是init正确,但12月3日不是。