如何获得一个月从Java中的一个日期:
DateFormat inputDF = new SimpleDateFormat("mm/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
此代码返回一天或一年,但不是月。
输出:
0 - 30 - 2011
这是因为你的格式不正确:你需要"MM/dd/yy"
月,因为"mm"
是分钟:
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
打印8 - 30 - 2011
(因为月是零基础, 演示 )
首先,你用mm
在你的日期格式, 根据的Javadoc这是“分钟” 。 您设定分钟到9
,而不是一个月。 它看起来像一个月默认为0(1月)。
使用MM
(大写“M'S)本月解析。 然后,你会看到8
,因为在Calendar
月从0开始,而不是1 。 加入1
取回所需的9
。
今年的阳历和罗马儒略历的第一个月是1月起为0
// MM is month, mm is minutes
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
然后
int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
如果你读了SimpleDateFormat
Javadoc中 ,你会发现, mm
为分钟。 你需要MM
为一个月。
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
否则,格式不读了month
领域,是值0
。
本月格式应该是MM
而不是mm
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
时间为某人提供现代化的答案。 其他的答案是,当有人问在2013年和仍然是正确的很好的答案。 今天,没有理由为什么你应该用旧的,过时的,同时出了名的麻烦斗争SimpleDateFormat
类。 java.time
,现代Java的日期和时间API,这么多更好一起工作:
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("M/d/yy");
LocalDate date1 = LocalDate.parse("9/30/11", inputFormatter);
System.out.println(date1);
这版画
2011-09-30
该LocalDate
类表示日期没有时间的天,你需要什么,你就需要很多的匹配程度比老班更准确Date
和Calendar
。
与使用的格式模式字符串DateTimeFormatter
类似于那些从SimpleDateFormat
,也有一些不同之处。 您可以使用大写MM
需要两个数字的月份(如09代表9)或单M
,让月与一个或两个数字被写入。 同样dd
或d
为一个月的一天。 yy
表示两位数的年份,并解释与基地2000年,也就是2000至2099年包容性(不会为我的生日合作)。
链接 : 甲骨文教程径:时间解释如何使用java.time
。
尝试像这样使用MM
,而不是mm
: -
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
打印的月份会8作为索引从0开始
或尝试: -
int month = cal.get(Calendar.MONTH) + 1;
mm
为分钟,用MM
同时指定格式。
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);// returns month value index starts from 0