我可以在Java中使用哪种数据类型来保存当前日期和时间?我想将日期时间存储在数据库中,并在java bean中有一个字段来保存它。
是java.util.Date
吗?
答案 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 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示例,我建议您阅读:
答案 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();
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时代。