在我的程序中有一个非常奇怪的问题。在这里,您可以看到String birthday
和Log
进行检查:
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()
有某种联系答案 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)
我想提供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。