当前位置: 代码迷 >> java >> Java日期格式转换 TL;博士 java.time 关于java.time
  详细解决方案

Java日期格式转换 TL;博士 java.time 关于java.time

热度:101   发布时间:2023-07-26 14:12:15.0

我目前正在从请求对象中提取三个表单字段输入。 日,月和年。

该天是该月的11日的第11天,该月是12月的12天,这是表示今年的2010年。

我需要将其转换为Java Date对象,但是由于已经进行了很多更改,因此我不确定将其存储在Java对象中的最佳方法是什么。 我需要它的格式

YYYY-MM-DD HH:MM:SS
所以我可以比较MySql数据库中的日期。

可以将字符串转换为java.util.Date对象。 Date类具有getTime()方法,该方法以Unix时间格式(自1970年1月1日,格林尼治标准时间00:00:00以来的毫秒数getTime()产生日期。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
long unix_time = dateFormat.parse(date).getTime();

您也可以在MySQL中使用UNIX_TIMESTAMP()来转换为Unix时间。

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
        -> 1196440219

我需要将其转换为Java Date对象

实例化 ,设置适当的字段,然后对其调用getTime 由于听起来好像您不是在收集时间信息,所以您可能需要专门清除这些字段,否则您将获得构造该对象的当前时间。

我需要它的格式,以便可以与MySql数据库中的日期进行比较。

您不需要文本格式来比较日期。 使用数据库的本地日期/时间类型创建列,并在Java中使用Date类型。 JDBC可以在您进出数据库时为您进行转换。

日期格式只能用于输出到外部过程或用于显示。 有关使用SimpleDateFormat进行格式化的信息,请参见Bakkal的答案。

TL;博士

myPreparedStatement.setObject(         // Exchange java.time object with database directly, with JDBC 4.2 and later.
    … , 
    LocalDate.of( 2012 , 12 , 10 )     // Instantiate a `java.time.LocalDate` object.
)

java.time

现代方法使用java.time类。

对于仅日期的值,如果数据库列类似于SQL标准的DATE类型,请使用Java中的LocalDate类。

LocalDate ld = LocalDate.of( 2012 , 12 , 10 ) ; 

或使用Month枚举对象。

LocalDate ld = LocalDate.of( 2012 , Month.DECEMBER , 10 ) ; 

使用兼容或更高版本的 ,您可以直接与数据库交换java.time对象。 无需仅需弦线; 使用智能对象。

myPreparedStatement.setObject( … , ld ) ;

恢复。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

关于java.time

框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的日期时间类,例如 , 和 。

现在处于的项目建议迁移到类。

要了解更多信息,请参见 。 并在Stack Overflow中搜索许多示例和说明。 规格为 。

在哪里获取java.time类?

  • , 和更高版本
    • 内置。
    • 标准Java API的一部分,具有捆绑的实现。
    • Java 9添加了一些次要功能和修复。
    • java.time的许多功能在 Backport中都被反向移植到Java 6和7。
    • 更高版本的Android捆绑了java.time类的实现。
    • 对于较早的Android, 项目改编了ThreeTen-Backport (如上所述)。 请参阅 。

项目使用其他类扩展了java.time。 该项目为将来可能在java.time中添加内容提供了一个试验场。 您可以在这里找到一些有用的类,比如 , , ,和 。

  相关解决方案