我需要创建两个日期对象。如果当前日期和时间是2012年3月9日11:30 AM然后在午夜时间用Java获取今天的日期
- 日期对象D1应该是2012 3月9日上午12:00
- 日期对象D2应该包含当前日期本身
不会输入日期,它是系统日期。
更新:
Date dt = new Date();
System.out.print(dt.toString());
给出当前日期和时间
我需要创建两个日期对象。如果当前日期和时间是2012年3月9日11:30 AM然后在午夜时间用Java获取今天的日期
- 日期对象D1应该是2012 3月9日上午12:00
- 日期对象D2应该包含当前日期本身
不会输入日期,它是系统日期。
更新:
Date dt = new Date();
System.out.print(dt.toString());
给出当前日期和时间
Calendar c = new GregorianCalendar();
c.set(Calendar.HOUR_OF_DAY, 0); //anything 0 - 23
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date d1 = c.getTime(); //the midnight, that's the first second of the day.
应该是周五09年3月00:00:00 IST 2012
你不应该也必须将毫秒设置为零? – 2014-05-10 19:03:48
还设置时区 - TimeZone tz = TimeZone.getTimeZone(“UTC”); cal.setTimeZone(tz); – 2016-04-18 11:02:48
如果能够对外部库添加到项目中。我会建议你尝试乔达时间。它有一个非常聪明的方式处理日期。
+1表示乔达。它的DateMidnight类应该为你做。 – 2012-03-09 06:45:46
@AshwiniRaman不,不是'DateMidnight'。 Joda-Time的所有“午夜”相关课程和方法都已被弃用。他们是基于错误的想法。请在DateTime上使用['withTimeAtStartOfDay'](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay--)方法。 – 2015-07-30 07:42:07
Calendar currentDate = Calendar.getInstance(); //Get the current date
SimpleDateFormat formatter= new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss"); //format it as per your requirement
String dateNow = formatter.format(currentDate.getTime());
System.out.println("Now the date is :=> " + dateNow);
private static Date truncateTime(Calendar cal) {
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return new Date(cal.getTime().getTime());
}
public static void main(String[] args) throws Exception{
Date d2 = new Date();
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(d2);
Date d1 = truncateTime(cal);
System.out.println(d1.toString());
System.out.println(d2.toString());
}
对于当前日期和时间:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
这将显示为:
2013年2月5日下午十二时40分24秒
问题不在午夜。 – Hugo 2016-04-21 13:38:29
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date(); System.out.println(dateFormat.format(date)); //2014/08/06 15:59:4
这不是问题问的午夜。 – Hugo 2016-04-21 13:38:15
使用org.apache.commons.lang3.time.DateUtils
Date pDate = new Date();
DateUtils.truncate(pDate, Calendar.DAY_OF_MONTH);
这里是一个Java 8的解决方案,使用新的java.time package(Tutorial)。
如果你可以在你的代码使用Java 8个对象,使用LocalDateTime
:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
如果需要旧的日期,即>ZonedDateTime
- - >Instant
- >Date
呼叫atZone(zone)
与指定的时间
使用这些转换转换上面创建的
LocalDateTime
到Date
-zone(或系统默认时区的ZoneId.systemDefault()
)创建一个ZonedDateTime
对象,根据需要对DST进行调整。ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal"));
呼叫toInstant()
转换的ZonedDateTime
到Instant
:
Instant i = zdt.toInstant()
最后,调用Date.from(instant)
转换的Instant
为Date
:
Date d1 = Date.from(i)
总之将类似于此为您提供:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Date d1 = Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant());
Date d2 = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
又见部分Legacy Date-Time Code (The Java™ Tutorials)为新java.time
功能与传统java.util
类的互操作性。
“午夜”一词很难定义。
有的认为它是新的一天开始前的那一刻。试图在软件中表现为棘手,因为一天的最后时刻总是可以细分为更小的一秒。
我建议在思考这个更好的办法是让“天的第一时刻”。
这支持定义的时间跨度为“半开”,在那里开始是包容性的,而结局是独家的常用方法。所以一整天从一天的第一个时刻开始,一直延伸到之后的第一刻,但不包括之后的第一刻。一整天想要这样(注意日期从第3天到第4天):
2016-02-03T00:00:00.0-08:00 [America/Los_Angeles]/2016-02-04T00: 00:00.0-08:00 [美国/洛杉矶]
如果使用Joda-Time库,调用withTimeAtStartOfDay
。
请注意我们如何指定时区。如果省略,则隐式应用JVM的当前默认时区。最好是明确的。
DateTime todayStart = DateTime.now(DateTimeZone.forID("America/Montreal")).withTimeAtStartOfDay() ;
如果使用Java 8或更高版本,最好使用内置于Java中的java.time包。见Jens Hoffman的sibling Answer。
在的Java 8 A液:
Date startOfToday = Date.from(ZonedDateTime.now().with(LocalTime.MIN).toInstant());
使用Java 8非常棒。两点建议:(1)给出明确的时区。 (2)使用'LocalDate.now(ZoneId.of(“Asia/Karachi”))。atStartOfDay(ZoneId.of(“Asia/Karachi”))'在当天不是从00开始的情况下考虑:00(通常在转换到夏令时(DST))。或者使用'ZonedDateTime.truncatedTo()'。 – 2018-01-20 11:59:50
什么都试过?它有用吗?如果不是,为什么不呢? – 2012-03-09 06:04:12
@pst添加的部分是我想要的d2。现在我需要是午夜时间的d1对象。 – 2012-03-09 06:15:26