java中的datetime数据类型

时间:2011-06-29 05:56:55

标签: java date timestamp

我可以在Java中使用哪种数据类型来保存当前日期和时间?我想将日期时间存储在数据库中,并在java bean中有一个字段来保存它。

java.util.Date吗?

8 个答案:

答案 0 :(得分:24)

java.util.Date及时代表即时,不提及特定时区或日历系统。它确实保留了日期和时间 - 它基本上是自Unix时代以来的毫秒数。

或者,您可以使用 了解这两件事的java.util.Calendar

我个人强烈建议您使用Joda Time这是一个更丰富的日期/时间API。它允许您更清楚地表达您的数据,包括“只是日期”,“本地时间”,“本地日期/时间”,“即时”,“带时区的日期/时间”等类型。大多数类型也是不可变的,这在代码清晰度方面是巨大的好处。

答案 1 :(得分:10)

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

private String getDateTime() {
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    return dateFormat.format(date);
}

答案 2 :(得分:4)

java.time

Java 8及更高版本中内置的java.time框架取代了与最早版本的Java和Joda-Time库捆绑在一起的旧日期时间类。 java.time类已经被反向移植到Java 6& 7和Android。

Instant类表示UTC时间轴上的一个时刻,分辨率为纳秒。

Instant instant = Instant.now();

应用UTC的偏移量(数小时,可能的分钟和秒数)以获得OffsetDateTime

ZoneOffset offset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , offset );

更好的是应用一个全时区,它是一个偏移量加上一组用于处理夏令时(DST)等异常的规则。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

数据库

希望JDBC驱动程序将更新为直接使用 java.time类。在此之前,我们必须使用java.sql类将日期时间值移入/移出数据库。但是将java.sql类的使用限制在数据库传输的杂事中。不要将它们用于业务逻辑。作为旧日期时间类的一部分,它们的设计很糟糕,令人困惑,也很麻烦。

使用添加到旧类的新方法转换为java.time或从java.time转换。查找to…valueOf方法。

java.sql.Timestamp类用于日期时间值。

java.sql.Timestamp ts = java.sql.Timestamp.valueOf( instant );

走向另一个方向......

Instant instant = ts.toInstant();

对于日期时间数据,在设计数据库中的表列时,您实际上总是需要TIMESTAMP WITH TIME ZONE数据类型而不是WITHOUT

答案 3 :(得分:3)

+1对Joda-time的推荐。如果您打算做的不仅仅是简单的Hello World示例,我建议您阅读:

Daylight saving time and time zone best practices

答案 4 :(得分:1)

取决于RDBMS甚至JDBC驱动程序。

大多数情况下,您可以在大多数时间使用java.sql.Timestamp以及准备好的声明:

pstmt.setTimestamp( index, new Timestamp( yourJavaUtilDateInstance.getTime() );

答案 5 :(得分:1)

我使用了这个导入:

import java.util.Date;

并声明我的变量:

Date studentEnrollementDate;

答案 6 :(得分:0)

您可以使用日历。

     Calendar rightNow = Calendar.getInstance();

Calendar

Date4j alternative to Date, Calendar, and related Java classes

答案 7 :(得分:0)

从Java 8开始,似乎java.time标准库是可行的方法。来自Joda time网页:

  

请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - 这是JDK的核心部分,它取代了这个项目。

回到你的问题。如果您使用Java 8,我想您需要LocalDateTime。因为它包含日期和时间,但不知道时区或任何参考时间点,例如unix时代。