使用SimpleDateFormat.parse时错误的月份

时间:2014-06-10 13:12:56

标签: java android simpledateformat

在我的程序中有一个非常奇怪的问题。在这里,您可以看到String birthdayLog进行检查:

birthday = String.valueOf(birthYear) + "-" + String.valueOf(birthMonth) + "-" + String.valueOf(birthDay);
Log.i(TAG, "Birthday: " + birthday)

然后我将它放到SimpleDateFormat并使用Log

进行检查
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");

Date birthDate = sdf.parse(birthday);
Log.i(TAG, "Birth date  : " + birthDate);

然后在Logcat我有:

I/App﹕ Birthday: 1999-10-15
I/App﹕ Birth date: Fri Jan 15 00:10:00 GMT+04:00 1999

正如您在日期中看到的那样Jan,但在字符串中它是10所以日期应如下所示:

Fri Nov 15 00:10:00 GMT+04:00 1999

我的错误在哪里?

P.S我认为我的问题与Getting wrong data when using SimpleDateFormat.parse()

有某种联系

3 个答案:

答案 0 :(得分:14)

使用:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

使用MM mm 分钟,如documentation所述......

如果您想以特定格式打印Date,请使用:

 sdf.format(birthday)

或其他SimpleDateFormat,如果您想以其他格式对其进行修改......

答案 1 :(得分:1)

我遇到了同样的问题,现在我发现了错误。我们应该使用MM一个月,mm表示分钟,dd表示一天。使用DD将我的日期更改为错误的月份,因此我使用了dd一天,因此我使用的最终格式为yyyy-MM-dd

答案 2 :(得分:0)

ThreeTenABP

我想提供2017年答案。对于Android,首先获得ThreeTenABP库。说明在this question: How to use ThreeTenABP in Android Project中。然后剩下的就像:

一样简单
    LocalDate birthDate = LocalDate.of(birthYear, birthMonth, birthDay);
    System.out.println("Birth date  : " + birthDate);

打印:

Birth date  : 1999-10-15

如果您将月份,月份和日期作为数字,则无需进行任何解析,这会使事情变得复杂。

ThreeTenABP是Android {7的现代Java日期和时间API java.time或JSR-310的后端。如果您使用的是Java 8或更高版本,java.time是内置的。audioSource.clip = clip; SavWav.Save(Application.persistentDataPath +"/myfile", clip);。 (非Android)Java 6和7还有一个后端:ThreeTen Backport