如何获得今天的日期?

时间:2011-02-18 21:28:59

标签: java date

换句话说,我想要提供Joda-Time的功能:

today = today.withTime(0, 0, 0, 0);

但没有Joda-Time,只有java.util.Date。

不推荐使用.setHours()等方法。还有更正确的方法吗?

9 个答案:

答案 0 :(得分:54)

Date today = new Date();
today.setHours(0); //same for minutes and seconds

由于不推荐使用这些方法,您可以使用Calendar

执行此操作
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0); // same for minutes and seconds

如果您最后需要Date个对象,只需致电today.getTime()

答案 1 :(得分:12)

Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
来自Apache Commons-Lang的

DateUtils。注意时区!

答案 2 :(得分:8)

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

找到here

答案 3 :(得分:8)

  

还有更正确的方法吗?

是的,有。

LocalDate.now( 
    ZoneId.of( "America/Montreal" ) 
).atStartOfDay(
    ZoneId.of( "America/Montreal" )
)

java.time

Java 8及更高版本现在内置了新的java.time框架。见Tutorial。灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展。

实施例

以下是一些示例,使用java.time。请注意它们如何指定时区。如果省略,则为JVM的当前默认时区。该默认值可能会有所不同,甚至在运行时期间随时更改,因此我建议您明确指定时区,而不是隐式依赖默认值。

以下是仅限日期的示例,没有时间或时区。

ZoneId zonedId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zonedId );
System.out.println( "today : " + today );
  

今天:2015-10-19

以下是获取当前日期时间的示例。

ZoneId zonedId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zonedId );
System.out.println( "zdt : " + zdt );

运行时:

  

zdt:2015-10-19T18:07:02.910-04:00 [美国/蒙特利尔]

当天的第一时刻

问题要求时间设置为零的日期时间。这假设一天中的第一个时刻始终是时间00:00:00.0,但情况并非总是如此。夏令时(DST)和其他异常意味着这一天可能会在01:00.0等不同时间开始。

幸运的是,java.time可以确定适合特定时区{0}的一天中的第一时刻。让我们使用上面代码中名为LocalDate的{​​{1}}和today ZoneId来查看一些代码。

zoneId
  

zdt:2015-10-19T00:00:00-04:00 [美国/蒙特利尔]

互操作性

如果必须有一个java.util.Date用于尚未更新的类以使用java.time类型,请转换。调用LocalDate::atStartOfDay方法。

ZonedDateTime todayStart = today.atStartOfDay( zoneId );

关于 java.time

java.util.Date.from( Instant instant )框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacyjava.util.Date和& Calendar

现在位于SimpleDateFormatJoda-Time项目建议迁移到maintenance mode类。

要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial

您可以直接与数据库交换 java.time 对象。使用符合JSR 310或更高版本的JDBC driver。不需要字符串,不需要java.util.Date date = java.util.Date.from( zdt.toInstant() ); 类。

从哪里获取java.time类?

How to use ThreeTenABP…项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如ThreeTen-ExtraIntervalYearWeekYearQuarter

答案 4 :(得分:6)

如果您想要当前日期的午夜(0:00 am),您可以使用默认构造函数并将时间部分清零:

Date today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0);

修改:使用Calendar进行更新,因为这些方法已弃用

Calendar today = Calendar.getInstance();
today.clear(Calendar.HOUR); today.clear(Calendar.MINUTE); today.clear(Calendar.SECOND);
Date todayDate = today.getTime();

答案 5 :(得分:1)

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.util.Calendar;
import java.util.Date;


/**
 * * Java Program to get current day, month, year, and dayOfweek in both Java 8
 * * and before e.g. JDK 1.6 and JDK 1.7
 */

/**
 * @author AJMAL SHA
 *
 */
public class Test {
    public static void main(String[] args) { // Before Java 8
        Date today = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(today); // don't forget this if date is arbitrary
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 1 being Sunday
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
        int month = cal.get(Calendar.MONTH); // 0 being January
        int year = cal.get(Calendar.YEAR);
        System.out.println("current date : " + today);
        System.out.println("dayOfWeek from date in Java 6 : " + dayOfWeek);
        System.out.println("dayOfMonth from a date in Java 7 : " + dayOfMonth);
        System.out.println("dayOfYear from a date in Java 1.6 : " + dayOfYear);
        System.out.println("month from a date in Java 1.7 : " + month);
        System.out.println("year from date in JDK 6 : " + year); // In Java 8
        LocalDate currentDate = LocalDate.now();
        DayOfWeek dow = currentDate.getDayOfWeek();
        int dom = currentDate.getDayOfMonth();
        int doy = currentDate.getDayOfYear();
        Month m = currentDate.getMonth();
        int y = currentDate.getYear();
        System.out.println("current local date : " + currentDate);
        System.out.println("dayOfWeek from a date in Java 8 : " + dow);
        System.out.println("dayOfMonth from date in JDK 8: " + dom);
        System.out.println("dayOfYear from a date in Java SE 8 : " + doy);
        System.out.println("month from a date in Java 1.8 : " + m);
        System.out.println("year from date in JDK 1.8 : " + y);
    }
}

<强> 输出..

current date : Sun Feb 19 06:38:16 PST 2017
dayOfWeek from date in Java 6 : 1
dayOfMonth from a date in Java 7 : 19
dayOfYear from a date in Java 1.6 : 50
month from a date in Java 1.7 : 1
year from date in JDK 6 : 2017
current local date : 2017-02-19
dayOfWeek from a date in Java 8 : SUNDAY
dayOfMonth from date in JDK 8: 19
dayOfYear from a date in Java SE 8 : 50
month from a date in Java 1.8 : FEBRUARY
year from date in JDK 1.8 : 2017

答案 6 :(得分:0)

使用此代码;

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

这将显示为:

2013年2月5日下午12:39:02

答案 7 :(得分:0)

使用此代码可轻松获取日期和时间:

package date.time;

import java.text.SimpleDateFormat;    
import java.util.Date;

public class DateTime {

    public static void main(String[] args) {
        SimpleDateFormat dnt = new SimpleDateFormat("dd/MM/yy :: HH:mm:ss");
        Date date = new Date();
        System.out.println("Today Date & Time at Now :"+dnt.format(date));  
    } 
}

答案 8 :(得分:0)

以任何特定格式获取今天日期的代码

您可以在SimpleDateFormat实例中定义所需的格式,以获取该特定格式的日期

 DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        String todaysdate = dateFormat.format(date);
         System.out.println("Today's date : " + todaysdate);

点击下面的链接以查看有效的日期格式组合。

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

代码:要从今天的日期提前x天或以前,要获得过去的日期或将来的日期。

例如:

今天日期:2018/11/27

xdayFromTodaysDate = 2获取日期为11/29/2018

xdayFromTodaysDate = -2获取日期为11/25/2018

  public String getAniversaryDate(int xdayFromTodaysDate ){

        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
        date = cal.getTime();
        String aniversaryDate = dateFormat.format(date);
        LOGGER.info("Today's date : " + todaysdate);
          return aniversaryDate;

    }

CODE:从给定日期提前x天或以前的日期

  public String getAniversaryDate(String givendate, int xdayFromTodaysDate ){


        Calendar cal = Calendar.getInstance();
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        try {
            Date date = dateFormat.parse(givendate);
            cal.setTime(date);
            cal.add(Calendar.DAY_OF_MONTH,xdayFromTodaysDate);
            date = cal.getTime();
            String aniversaryDate = dateFormat.format(date);
            LOGGER.info("aniversaryDate : " + aniversaryDate);
            return aniversaryDate;
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }

    }