如何在Java中初始化日期类型的变量?

15
import java.util.Date;
Date firstDate; 

我不知道如何初始化firstDate,例如对于String类型你会说

String line1="First line" 

但日期的格式是什么?你能举个例子吗?


那要看你想使用哪个构造函数。最基本的是 Date firstDate = new Date();。然而,还有其他构造函数可供使用,你可以直接提供一个 long 类型的时间或者一个类似于 '2015-12-06 17:01:00' 的 string - Tobias Baumeister
给未来的读者:Date 被认为是过时的。你应该使用 java.time 包中的类。有关更多信息,请阅读上述问题的这个答案 - MC Emperor
7个回答

13

这里是Oracle网站上Date类的Javadoc:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html
如果您向下滚动到“构造函数概要”部分,您将看到可以实例化Date对象的不同选项。与Java中的所有对象一样,您可以使用以下代码创建一个新对象:

Date firstDate = new Date(ConstructorArgsHere);

现在你有一点选择。如果你不传入任何参数,只需执行以下操作:

Date firstDate = new Date();

它将表示您调用它的确切日期和时间。以下是您可能想要使用的其他构造函数:

Date firstDate1 = new Date(int year, int month, int date);
Date firstDate2 = new Date(int year, int month, int date, int hrs, int min);
Date firstDate3 = new Date(int year, int month, int date, int hrs, int min, int sec);

13
注意,这最后三个初始化已经过时。 - SirExess

13

java.util.Date构造函数带有参数,例如new Date(int year, int month, int date, int hrs, int min)已被弃用,最好不要再使用它。Oracle文档更倾向于使用java.util.Calendar的方式。因此,您可以通过getTime()方法设置任何日期并实例化Date对象。

Calendar calendar = Calendar.getInstance();
calendar.set(2018, 11, 31, 59, 59, 59);
Date happyNewYearDate = calendar.getTime();

请注意月份从0开始计数


8
要从字符串解析日期,您可以选择它所需的格式。例如:
public Date StringToDate(String s){

    Date result = null;
    try{
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        result  = dateFormat.parse(s);
    }

    catch(ParseException e){
        e.printStackTrace();

    }
    return result ;
}

如果您现在想使用这种方法,您需要使用类似以下的东西。
Date date = StringToDate("2015-12-06 17:03:00");

更多解释请查看http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

。该链接提供了有关Java中SimpleDateFormat类的详细信息,可帮助您更好地理解相关内容。

这真是救了我的一天,非常感谢。 - MD Ashik

6

简述

使用Instant代替java.util.Date

Instant.now()  // Capture current moment as seen in UTC.

如果必须使用 Date,请进行转换。
java.util.Date.from( Instant.now() ) 

java.time

Java 8及更高版本内置的java.time框架已经取代了java.util.Date和.Calendar类。这些新类是一个巨大的改进,受到成功的Joda-Time库的启发。

java.time类倾向于使用静态工厂方法而不是构造函数来实例化对象。

要获取当前时刻的UTC时间:

Instant instant = Instant.now();

获取特定时区的当前时间:

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );

如果你必须使用其他尚未更新为java.time类型的类,那么需要使用Instant进行转换,以获得一个java.util.Date。

java.util.Date date = java.util.Date.from( zdt.toInstant() );

Java中的日期时间类型表格,包括现代和旧式类型。


关于java.time

java.time框架内置于Java 8及更高版本中。这些类替代了老旧的、问题多多的遗留日期时间类,例如java.util.DateCalendarSimpleDateFormat

欲知详情,请参见Oracle教程。此外,您还可以在Stack Overflow上搜索许多示例和解释。规范为JSR 310

Joda-Time项目现已进入维护模式,建议向java.time类进行迁移。

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,也不需要java.sql.*类。

从何处获取java.time类?

ThreeTen-Extra 项目扩展了 java.time 库,提供了更多的类。该项目是可能被加入到 java.time 库中的潜在选择。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。欲了解更多,请参见此处

4
要将日期初始化为当前日期,您可以执行以下操作:
Date firstDate = new Date();

如果您想从字符串中获取它,可以使用SimpleDateFormat,例如:

String dateInString = "10-Jan-2016";
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
try {
    Date date = formatter.parse(dateInString);
    System.out.println(date);
    System.out.println(formatter.format(date));
} catch (ParseException e) {
    //handle exception if date is not in "dd-MMM-yyyy" format
}

2

2020更新:对于简单日期,请使用LocalDate。

然后,我们将按以下方式初始化日期23 Oct 1988:

LocalDate date = LocalDate.of(1988,10,23);

0
使用 java.util.Calendar 初始化日期:
Calendar calendar = Calendar.getInstance();

//To Initialize Date to current Date
Date date = calendar.getTime();

//To Initialize Date to a specific Date of your choice (here I'm initializing the date to 2022-06-15)
calendar.set(2022, Calendar.JUNE, 15);
Date date = calendar.getTime();

可以使用SimpleDateFormat将日期的格式进行转换。

1
Calendar类设计不佳且过时已久。此外,您可能无法从getInstance获得GregorianCalendar对象,导致set(2022, Calendar.JUNE, 15)给出荒谬的结果。而SimpleDateFormat更糟糕。请改用Basil Bourque的答案 - Ole V.V.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接