Java Calendar.HOUR_OF_DAY在下午2点不工作

时间:2015-10-16 12:52:27

标签: java calendar

我需要在当前时间添加两个小时,并以24小时格式表示。 这是我的代码

public class Tester {

    @Test
    public void test() {

//for example i have entered time 12.00PM so it should add 2 hours and print 14.00
        System.out.println(stringToDate("2015-10-16 12:00:03"));


    }


    public static Date stringToDate(String str) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = null;
        try {
            date = formatter.parse(str);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY)+2);
            date = calendar.getTime();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date;
}


}

预期产出

Fri Oct 16 14:00:03 IST 2015

但我得到了Fri Oct 16 02:00:03 IST 2015

如果我使用时间"2015-10-16 11:00:03"代替"2015-10-16 12:00:03" 然后我得到正确的输出

"2015-10-16 13:00:03"

请有人帮我解决这个问题

3 个答案:

答案 0 :(得分:5)

这是错的:

calendar.add(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 2);

在这种情况下,您将当前小时加上当前小时的2小时。你应该使用:

calendar.add(Calendar.HOUR_OF_DAY, 2);

对于24小时格式:使用HH代替hh

答案 1 :(得分:4)

您的方法应如下所示

public static Date stringToDate(String str) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
        date = formatter.parse(str);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, 2);
        date = calendar.getTime();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;   
}

答案 2 :(得分:2)

将小时格式更改为24小时系统(HH)而不是(hh),并且日历时间函数Calendar.add增加2小时

public static Date stringToDate(String str) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
        date = formatter.parse(str);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, 2);
        date = calendar.getTime();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
}