java - 如何更改时间戳中的日期格式
问题描述
我正在使用preparedStatement 来更新我的sql 表。目前我的日期格式是 yyyy-mm-dd 如何使它成为 dd-mm-yyyy。
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306?user=root&password=1234&useSSL=false");
con.setAutoCommit(false);
pstmt = con.prepareStatement(qry);
sp = con.setSavepoint();
System.out.println("Enter your name");
String name = sc.next();
System.out.println("Enter your contact number");
long phoneNum = sc.nextLong();
System.out.println("Purpose of visit");
String purpose = sc.next();
pstmt.setString(1, name);
pstmt.setLong(2, phoneNum);
pstmt.setString(3, purpose);
java.sql.Timestamp dd = new java.sql.Timestamp(new java.util.Date().getTime());
pstmt.setTimestamp(4, dd);
pstmt.setTimestamp(5, dd);
pstmt.executeUpdate();
con.commit();
解决方案
可怕的 java.sql.Timestamp
类现在是遗留的,从 JDBC 4.2 及更高版本开始不再需要。对于数据库工作,请OffsetDateTime
改用,可能调整到/从Instant
或ZonedDateTime
.
LocalDate
您似乎只需要日期,没有时间,没有时区或与 UTC 的偏移量。
要表示仅日期,请使用LocalDate
类。
LocalDate ld = LocalDate.parse( "2019-01-23" ) ; // By default, parses strings in standard ISO 8601 format: YYYY-MM-DD.
要捕获当前日期,请指定时区。
ZoneId z = ZoneId.systemDefault() ;
LocalDate ld = LocalDate.now( z ) ;
要生成表示该值的文本,请使用DateTimeFormatter
.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = ld.format( f ) ;
JDBC
LocalDate
在类似于标准 SQL 类型的数据类型的列中将对象写入数据库DATE
:
myPreparedStatement.setObject( … , ld ) ;
从数据库中检索:
LocalDate ld = myResultSet( … , LocalDate.class ) ;
推荐阅读
- metal - Apple Metal API“setVertexBuffer:offset:atIndex:”中的问题
- vulkan - Vulkan 队列的底层硬件映射
- python - 如何使用 query.all() 计算 sqlalchemy 数据库中的 id 数?
- jsf - 在 actionListener 之后数据表没有更新
- java - 动态更改 BungeeCord 服务器配置
- php - PHP gnupg_addsignkey 错误:get_key 失败
- bazel - 关于bazel概念的一些问题
- c# - 无法对 Here Maps 定位端点进行异步发布调用
- java - 为什么这个数组旋转程序输出 0?
- c++ - 为什么 Qt c++ 应用程序在实例化没有它的对象上的属性时不会抛出异常?