【问题标题】:Not able to increment month by 1 in java无法在java中将月份增加1
【发布时间】:2016-07-11 08:07:06
【问题描述】:

我必须从当前日期开始在 mysql db 中存储下一个 30 天的日期。如果该月结束,它应该自动从 nxt month 开始获取日期。当我以如下格式存储日期时,这种情况会正确发生 “2016 年 7 月 11 日星期一 13:28:23 IST”。事情就是这样发生的。

Calendar calendar = Calendar.getInstance();
if(repetitionSpan.equals("weekly")){
        for(int i=0;i<7;i++){               
            String insertQuery="insert into notifications(notificationId,messageForUser,notificationReceiver,notificationSender,status,timeOfNotification,typeOfNotification)values('"+"RM"+calendar.getTimeInMillis()+"','"+notificationDetails.getMessageForUser()+"','"+notificationDetails.getNotificationReceiver()+"','"+notificationDetails.getNotificationSender()+"','"+notificationDetails.getStatus()+"','"+calendar.getTime()+"','"+notificationDetails.getTypeOfNotification()+"')";
            sessionFactory.getCurrentSession().createSQLQuery(insertQuery).executeUpdate(); 
            calendar.add(Calendar.DATE, 1);
        }

在 ablove 情况下,它工作正常。但在另一种情况下,我以“yyyy/mm/dd”格式存储日期,它不起作用。

String DATE_FORMAT = "yyyy/mm/dd";
String date_string = "2001/08/12";
java.text.SimpleDateFormat sdf =
new java.text.SimpleDateFormat(DATE_FORMAT);
Date date = (Date)sdf.parse(date_string);
Calendar c1 = Calendar.getInstance();
c1.setTime(date); 
int maxDay = c1.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("maxDay is"+maxDay);
System.out.println("last month date is"+c1.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println("Date is : " + sdf.format(c1.getTime()));
for(int i=0;i<maxDay;i++){
    c1.add(Calendar.DATE,1);
    System.out.println("Date + 1 month is : " + sdf.format(c1.getTime()));
}

输出是:- 月份没有增加(即使在日期达到 31 之后)

【问题讨论】:

  • 您能澄清一下“不工作”的确切含义吗?
  • String DATE_FORMAT = "yyyy/mm/dd"; - 那是年/分/天
  • @Rhayene 我更新了我的问题,回答了您的问题
  • 呃,不 - 老兄。您可能认为这很明显,但这并不正确。检查 JavaDocs。
  • @JavaDevelopers 请看一下API 或我的答案....mm 是分钟....:S

标签: java date calendar


【解决方案1】:

你的问题出在格式上。

String DATE_FORMAT = "yyyy/mm/dd";

mm 表示

一小时的分钟

所以,为了得到正确的Date,你必须使用:

String DATE_FORMAT = "yyyy/MM/dd";

输出:

maxDay is31
last month date is31
Date is : 2001/08/12
Date + 1 month is : 2001/08/13
Date + 1 month is : 2001/08/14
Date + 1 month is : 2001/08/15
Date + 1 month is : 2001/08/16
Date + 1 month is : 2001/08/17
Date + 1 month is : 2001/08/18
Date + 1 month is : 2001/08/19
.....
Date + 1 month is : 2001/09/11
Date + 1 month is : 2001/09/12

WORKING IDEONE DEMO!

【讨论】:

  • 在我的上述方法中,我以不同的格式存储日期,我没有增加月份,当它到达月底时它会自行发生。在你的这个解决方案中也不能发生这种情况吗?
  • @JavaDevelopers 什么?我不明白你的意思,你能举个例子吗?我会调整我的答案:)
  • @JavaDevelopers 在这个答案中,Jordi 每天递增。
  • @JavaDevelopers,我检查了你的questions tab,发现你没有接受任何人。您必须知道,如果此答案或任何答案解决了您的问题,请通过单击复选标记考虑 accepting it。这向更广泛的社区表明您已经找到了解决方案,并且给回答者和您自己带来了一些声誉。当然没有义务这样做。
  • @JordiCastilla 对不起,stackoverflow 的新手,不知道这一点,我试图通过单击“喜欢”按钮来喜欢你的答案,但它需要足够的声誉。但现在我已经接受了你的回答,从现在开始我会一直这样做。谢谢 agin.!!!!
猜你喜欢
  • 2021-11-22
  • 1970-01-01
  • 2019-06-03
  • 2014-11-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
相关资源
最近更新 更多