我需要创建两个日期对象。如果当前日期和时间是2012年3月9日上午11:30,那么
- 日期对象d1应为 2012年3月9日上午12:00
- 日期对象d2应包含当前日期本身
不会输入日期,而是系统日期。
更新:
Date dt = new Date();
System.out.print(dt.toString());
给出当前日期和时间
答案 0 :(得分:56)
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.
应该是Fri Mar 09 00:00:00 IST 2012
答案 1 :(得分:33)
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
System.out.println(sdf.format(date));
答案 2 :(得分:13)
以下是基于Java 8的解决方案,使用新的java.time package(Tutorial)。
如果您可以在代码中使用Java 8对象,请使用LocalDateTime
:
LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
如果您需要旧版日期,即java.util.Date
:
使用以下转换将您在上面创建的LocalDateTime
转换为Date
:
LocalDateTime
- >ZonedDateTime
- >Instant
- >Date
使用指定的时区(或系统默认时区为atZone(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 :(得分:10)
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);
答案 4 :(得分:4)
如果您能够将外部库添加到项目中。我建议你试试Joda-time。它有一种非常聪明的日期工作方式。
答案 5 :(得分:4)
当前日期和时间:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
这将显示为:
2013年2月5日下午12:40:24
答案 6 :(得分:2)
使用org.apache.commons.lang3.time.DateUtils
Date pDate = new Date();
DateUtils.truncate(pDate, Calendar.DAY_OF_MONTH);
答案 7 :(得分:2)
Java 8 中的解决方案:
Date startOfToday = Date.from(ZonedDateTime.now().with(LocalTime.MIN).toInstant());
答案 8 :(得分:1)
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());
}
答案 9 :(得分:1)
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
答案 10 :(得分:1)
这是一种以毫秒获取UTC午夜的Java 8方式
ZonedDateTime utcTime = ZonedDateTime.now(ZoneOffset.UTC);
long todayMidnight = utcTime.toLocalDate().atStartOfDay().toEpochSecond(ZoneOffset.UTC) * 1000;
答案 11 :(得分:0)
“午夜”这个词很难定义。
有些人认为它是之前新一天开始的时刻。试图在软件中将其表示为与当天最后时刻一样棘手的事情,总是可以细分为一小部分。
我建议更好的思考方法是获得“一天中的第一时刻”。
这支持将常用时间定义为“半开”的常用方法,其中开头是包含的,而结尾是独占的。所以整整一天从一天中的第一个时刻开始,一直持续到 天的第一个时刻,但不包括在内。整整一天都会这样(注意从第3天到第4天的日期):
2016-02-03T00:00:00.0-08:00 [美国/洛杉矶] /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。