Date月份減一的時(shí)候?qū)嶋H上沒有減的情況

起因

是有這么一個(gè)功能需求悟泵,統(tǒng)計(jì)最近四個(gè)月的訂單情況,我的想法是獲取當(dāng)前時(shí)間點(diǎn)這個(gè)月的開始的第一秒和結(jié)束的第一秒以及前三個(gè)月的開始第一秒結(jié)束第一秒這個(gè)時(shí)間段搔谴,我是通過(guò)date.setMonth來(lái)設(shè)置月份以便跳到上一個(gè)月的

        Date date = Date.valueOf("2016-12-31");//當(dāng)前時(shí)間
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        String month = format.format(date);
        String start = month + "-01 00:00:00";
        String end = month + "-31 23:59:59";
        
        for(int i = 0; i < 3; i++) {
            System.out.println("before=" + date.getMonth());
            int temp = date.getMonth()-1;
            date.setMonth(temp);
            System.out.println("after=" + date.getMonth());
            month = format.format(date);
            start = month + "-01 00:00:00";
            end = month + "-31 23:59:59";
        }

測(cè)試上線魁袜,沒啥問(wèn)題
但是到了2016年12月31日的時(shí)候發(fā)現(xiàn)統(tǒng)計(jì)的內(nèi)容居然有兩個(gè)最近一月桩撮,然后我就寫了上面那段代碼敦第,發(fā)現(xiàn)運(yùn)行的結(jié)果是這樣的

before=11
after=11
before=11
after=10
before=10
after=9

也就是說(shuō)有兩次11月的

原因

可以看Java源代碼的setMonth的注釋得到原因
2016-12-31被減去了一個(gè)月如果用Date計(jì)算的話,結(jié)果是2016-11-31店量,但是根本沒有2016-11-31這一天芜果,所以系統(tǒng)把他進(jìn)位了到了2016-12-1,所以造成了第一次for的時(shí)候輸出兩個(gè)都是11,2016-10-31也有這一種情況融师。

解決辦法

使用Calendar來(lái)進(jìn)行日期的計(jì)算
上文中的代碼如果使用Calender來(lái)計(jì)算的話是這樣的

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        java.util.Date date = calendar.getTime();
        System.out.println(format.format(date));
        
        for(int i = 0; i < 3; i++) {
            calendar.add(Calendar.MONTH, -1);
            java.util.Date temp = calendar.getTime();
            System.out.println(format.format(temp));
        }

涉及日期計(jì)算最好使用Calendar

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末右钾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舀射,老刑警劉巖窘茁,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脆烟,居然都是意外死亡山林,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門邢羔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驼抹,“玉大人,你說(shuō)我怎么就攤上這事拜鹤】蚣剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵敏簿,是天一觀的道長(zhǎng)明也。 經(jīng)常有香客問(wèn)我,道長(zhǎng)惯裕,這世上最難降的妖魔是什么诡右? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮轻猖,結(jié)果婚禮上帆吻,老公的妹妹穿的比我還像新娘。我一直安慰自己咙边,他們只是感情好猜煮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著败许,像睡著了一般王带。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上市殷,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天愕撰,我揣著相機(jī)與錄音,去河邊找鬼醋寝。 笑死搞挣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的音羞。 我是一名探鬼主播囱桨,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嗅绰!你這毒婦竟也來(lái)了舍肠?” 一聲冷哼從身側(cè)響起搀继,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翠语,沒想到半個(gè)月后叽躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肌括,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年险毁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片们童。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畔况,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慧库,到底是詐尸還是另有隱情跷跪,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布齐板,位于F島的核電站吵瞻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甘磨。R本人自食惡果不足惜橡羞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望济舆。 院中可真熱鬧卿泽,春花似錦、人聲如沸滋觉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椎侠。三九已至第租,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間我纪,已是汗流浹背慎宾。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浅悉,地道東北人趟据。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像仇冯,于是被迫代替她去往敵國(guó)和親之宿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子族操,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容