在 Java 中重置日历实例的时间部分
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4365631/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Reset time part of Calendar instance in Java
提问by sergionni
There is Java code,which is ran on 2 different environments and inserts records with JdbcTemplate
to DB.
有 Java 代码,它在 2 个不同的环境中运行并将记录插入JdbcTemplate
到DB 中。
Results of its running are different for both envs. Particularly,for Date
fields.
两种环境的运行结果都不同。特别是对于Date
字段。
On first environment(Oracle XE) it produces record:
在第一个环境(Oracle XE)上它产生记录:
"12/03/2010";191094;"71697211000";3229;880323202;NULL;0;1;0;NULL;0;NULL
Second environment(Oracle non XE):
第二个环境(Oracle 非 XE):
"12/03/2010 12:00:00";191094;"71697211000";3229;880323202;NULL;0;1;0;NULL;0;NULL
NLS_DATE_FORMAT(if it's crucial) for first env is DD-MON-RR
,
for second env is DD-MON-RRRR
NLS_DATE_FORMAT(如果它很重要)对于第一个 env 是DD-MON-RR
,对于第二个 env 是DD-MON-RRRR
The question is,what Oracle settings may affect,that second env Date format is another?
问题是,什么 Oracle 设置可能会影响,第二个 env 日期格式是另一种?
回答by sergionni
should set following Calendar properties in Java code:
应该在 Java 代码中设置以下日历属性:
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));
instead of:
代替:
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);
回答by Kevin Lacquement
According to the documentation, HH
refers to a 12-hour time. The 12 in the time you're retrieving is 12 midnight. What you want is HH24
, which ges you a 24-hour time, starting at 00 for midnight.
根据文档,HH
指的是 12 小时的时间。您检索时的 12 点是午夜 12 点。您想要的是HH24
,它为您提供 24 小时制,从午夜 00 开始。
回答by Jon Skeet
If you don't want to show the time part, don't include a format string which includesthe time part ("HH:MI:SS").
如果您不想显示时间部分,请不要包含包含时间部分的格式字符串(“HH:MI:SS”)。
You've reset the time part to midnight, basically... there's no way of differentiating between a Calendar
or Date
set to exactly midnight and a Calendar
or Date
"without" a time part - because there's no such concept as a Calendar
/Date
with only a date part.
您已将时间部分重置为午夜,基本上......没有办法区分 a Calendar
or Date
set 到午夜和 a Calendar
or Date
“without” a time part - 因为没有这样的概念,例如 a Calendar
/Date
只有一个日期部分。
Now you may be able to have that in the database, depending on what types are available to you - but java.util.Date
and java.util.Calendar
always represent points in time, not just dates.
现在,你可能能够有一个数据库,这取决于什么类型的都可以给你-但java.util.Date
并java.util.Calendar
始终代表时间点,而不仅仅是日期。
The reason it's showing 12 instead of 00 is because you're using "HH" instead of "HH24", as per lacqui's answer. I assume you don't really wantto see the time at all though, given that you'll have reset it to midnight...
根据 lacqui 的回答,它显示 12 而不是 00 的原因是因为您使用的是“HH”而不是“HH24”。我假设您根本不想看到时间,因为您将其重置为午夜......
回答by Domenic D.
I'd recommend you extend one of the Calendar classes like this:
我建议您像这样扩展 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;
}
}
Instantiate in this way:
以这种方式实例化:
Calendar june30 = CalendarDateOnly.getInstance();
june30.set(2000, Calendar.JUNE, 30);
回答by Bhuwan Prasad Upadhyay
/*
* 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));
}
}