我在Azure SQL数据库中保存了一个时间戳,格式为2004-09-23 10:52:00。当我获取值时,我使用sqlrowset,其中我使用getString("last_updated_user")
并获得这样的输出"2004-09-23 10:52:00.0"。当我尝试使用getTimeStamp("last_updated_user")
时,我得到了微秒。谁能帮我把它格式化成"2004-09-23 10:52:00"?基于一些内置函数,如。format或其他东西,而不是通过替换或子字符串删除小数?
使用java.time
的解决方案,现代日期-时间API:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String d = "2004-09-23 10:52:00.0";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d H:m:s.S", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(d, dtfInput);
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss", Locale.ENGLISH);
String str = ldt.format(dtfOutput);
System.out.println(str);
}
}
输出:
2004-09-23 10:52:00
在线演示从Trail: Date Time中了解更多关于现代Date-Time API*。
*无论出于何种原因,如果您必须坚持Java 6或Java 7,您可以使用ThreeTen-Backport,它支持大部分Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,而你的Android API级别仍然不符合Java-8,请检查Java 8+ API,通过desugaring和如何在Android项目中使用ThreeTenABP。
JDBC 4.2和java.time
我猜一点,因为我不知道Azure SQL数据库。您正在报告的内容听起来像是您的数据库中有SQLtimestamp
或同等内容。假设您的JDBC驱动程序是JDBC 4.2兼容的,从数据库获取LocalDateTime
(不是字符串):
LocalDateTime lastUpdatedUser
= sqlrowset.getObject("last_updated_user", LocalDateTime.class);
我进一步假设sqlrowset
是javax.sql.RowSet
。要格式化成您想要的字符串,请使用如下格式器:
private static final DateTimeFormatter FORMATTER
= DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
现在我们可以这样做:
System.out.println("LocalDateTime retrieved: " + lastUpdatedUser);
String formatted = lastUpdatedUser.format(FORMATTER);
System.out.println("Formatted: " + formatted);
示例输出:
LocalDateTime retrieved: 2004-09-23T10:52 Formatted: 2004-09-23 10:52:00