从当前日期时间获取1个月前的日期时间

4

我想获取一个月前的日期和时间,但是我从中得到的是2013年11月2日,正确的应该是2013年12月2日,请帮忙。

我的代码如下:

Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MONTH, -1);

    int thisYear = calendar.get(Calendar.YEAR);
    int thisMonth = calendar.get(Calendar.MONTH);
    int thisDay = calendar.get(Calendar.DAY_OF_MONTH);

阅读以下内容可能会有所帮助:https://dev59.com/WnRC5IYBdhLWcg3wS_EF - Morrison Chang
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#MONTH 这些值是从零开始索引的,所以您的代码是正确的,您只需要理解如何读取该值。 - Greg Giacovelli
1
常量值从0开始,即1月为0,12月为11。 - Abhishek Agarwal
2个回答

13

你的代码是正确的,我认为月份从零开始计数 ;)

试试这个:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
Date date = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy MM dd");
String dateOutput = format.format(date);

这将为您解释日期值的逻辑单位,而不是内部表示方式。

请查看SimpleDateFormat文档以获得更自定义的方法。我只是根据您的问题文本做出了一些假设。


哦,你想打印出“January”这个单词?你可以使用一个查找表,将Calendar.JANUARY映射为“January”,或者只需使用SimpleDateFormatter并传递Calendar对象表示的日期。 - Greg Giacovelli
应该这样尝试一下:calendar.set(Calendar.MONTH, Calendar.MARCH); calendar.set(Calendar.DAY_OF_MONTH, 31); calendar.add(Calendar.MONTH, -1); - Greg Giacovelli

4
你可以尝试这个。
    Calendar calendar = Calendar.getInstance();
    if(calendar.get(Calendar.MONTH) == Calendar.JANUARY){
        calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)-1);
        calendar.set(Calendar.MONTH, calendar.DECEMBER);
    }else{
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)-1);
    }

    int thisYear = calendar.get(Calendar.YEAR);
    int thisMonth = calendar.get(Calendar.MONTH);
    int thisDay = calendar.get(Calendar.DAY_OF_MONTH);

你不能执行 calendar.YEAR-1。这没有意义。YEAR 是 Calendar 类的静态成员,是一个常量。从中减去 1 没有意义,因为它只是查找值的键。 - Greg Giacovelli
这段代码返回结果为2014-11-2 00:00:00。我应该得到2013-12-02 00:00:00。 - micky
我已经成功运行并编辑了这个答案,请现在尝试。 - dinesh sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接