午夜时分在爪哇获取今天的约会

时间:2012-03-09 06:02:59

标签: java date

我需要创建两个日期对象。如果当前日期和时间是2012年3月9日上午11:30,那么

  
      
  • 日期对象d1应为 2012年3月9日上午12:00
  •   
  • 日期对象d2应包含当前日期本身
  •   

不会输入日期,而是系统日期。

更新

Date dt = new Date();
System.out.print(dt.toString());

给出当前日期和时间

12 个答案:

答案 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 packageTutorial)。

如果您可以在代码中使用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

  1. 使用指定的时区(或系统默认时区为atZone(zone))调用ZoneId.systemDefault()以创建ZonedDateTime对象,并调整为DST根据需要。

    ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal"));
    
  2. 致电toInstant()ZonedDateTime转换为Instant

    Instant i = zdt.toInstant()
    
  3. 最后,请致电Date.from(instant)Instant转换为Date

    Date d1 = Date.from(i)
    

  4. 总结,它看起来与您的相似:

    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。它有一种非常聪明的日期工作方式。

http://joda-time.sourceforge.net/

答案 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