在Java中重置Calendar实例的时间部分

时间:2010-12-06 10:56:09

标签: java date time format reset

有Java代码,它在2个不同的环境中运行,并将JdbcTemplate的记录插入 DB

两种环境的运行结果都不同。特别是对于Date字段。

在第一个环境(Oracle XE)上,它会生成记录:

"12/03/2010";191094;"71697211000";3229;880323202;NULL;0;1;0;NULL;0;NULL

第二环境(Oracle非XE):

"12/03/2010 12:00:00";191094;"71697211000";3229;880323202;NULL;0;1;0;NULL;0;NULL

NLS_DATE_FORMAT (如果它至关重要)第一个env是DD-MON-RR, 对于第二个环境是DD-MON-RRRR

问题是,Oracle设置可能会影响什么,第二个env Date格式是另一个?

5 个答案:

答案 0 :(得分:27)

应在Java代码中设置以下Calendar属性:

  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
  cal.set(Calendar.MINUTE, cal.getActualMinimum(Calendar.MINUTE));
  cal.set(Calendar.SECOND, cal.getActualMinimum(Calendar.SECOND));
  cal.set(Calendar.MILLISECOND, cal.getActualMinimum(Calendar.MILLISECOND));

而不是:

  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.HOUR_OF_DAY, 0);
  cal.set(Calendar.MINUTE, 0);
  cal.set(Calendar.SECOND, 0);
  cal.set(Calendar.MILLISECOND, 0);

答案 1 :(得分:4)

根据the documentationHH指的是12小时的时间。你正在检索的12个是午夜12点。你想要的是HH24,这是一个24小时的时间,从00开始到午夜。

答案 2 :(得分:3)

如果您不想显示时间部分,请不要包含包含时间部分的格式字符串(“HH:MI:SS”)。

您已将时间部分重置为午夜,基本上......无法区分CalendarDate设置为正好午夜和Calendar或{{1 “没有”时间部分 - 因为没有Date / Calendar这样的概念,只有一个日期部分。

现在,您可以在数据库中拥有该功能,具体取决于您可以使用的类型 - 但Datejava.util.Date始终代表时间点,而不仅仅是日期。

它显示12而不是00的原因是因为你使用的是“HH”而不是“HH24”,根据lacqui的回答。我假设你真的不想看到时间,因为你已经将它重置为午夜......

答案 3 :(得分:2)

我建议你像这样扩展一个Calendar类:

public class CalendarDateOnly extends GregorianCalendar {

    public static Calendar getInstance() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, cal.getActualMinimum(Calendar.HOUR_OF_DAY));
        cal.set(Calendar.MINUTE,      cal.getActualMinimum(Calendar.MINUTE));
        cal.set(Calendar.SECOND,      cal.getActualMinimum(Calendar.SECOND));
        cal.set(Calendar.MILLISECOND, cal.getActualMinimum(Calendar.MILLISECOND));
        return cal;
    }
}

以这种方式实例化:

Calendar june30 = CalendarDateOnly.getInstance();
june30.set(2000, Calendar.JUNE, 30);

答案 4 :(得分:1)

/*
 * Date : 2015-07-09
 * Author : Bhuwan Prasad Upadhyay
 */
package com.developerbhuwan.date.utils;

import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author developerbhuwan
 */
public class CalenderUtils {

    public static Calendar getNewCalendarInstance() {
        Calendar calendar = Calendar.getInstance();
        return resetCalender(calendar);
    }

    public static Date resetDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return resetCalender(calendar).getTime();
    }

    public static Calendar resetCalender(Calendar calendar) {
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar;
    }

    public static void setTimeInCalendar(Calendar calendar, Date date) {
        calendar.setTime(resetDate(date));
    }

}