ejb*_*boy 3 java timestamp simpledateformat
我正在尝试提出SimpleDateFormat模式来解析和格式化 JDBC 时间戳,特别是以下格式的日期yyyy-mm-dd hh:mm:ss.fffffffff,其中ffffffffff表示纳秒。
不幸的是new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000000")不起作用,抛出以下异常:
java.text.ParseException: Format.parseObject(String) failed
Run Code Online (Sandbox Code Playgroud)
SimpleDateFormat 是否可以做到这一点,或者我必须创建一个 java.text.DateFormat 的自定义子类来处理这种情况?请注意,这不是关于如何yyyy-mm-dd hh:mm:ss.fffffffff在 Java 中解析字符串的问题,我对声明性方法感兴趣,即不需要额外修改输入字符串的 SimpleDateFormat 模式。
示例:
我希望输入2012-02-05 17:00:34.427000000
被解析为 java.util.Date 其中毫秒部分是427。
这是我迄今为止尝试过的格式列表,但由于各种原因它们都失败了:
new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000000") —— java.text.ParseException: Format.parseObject(String) failednew SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSSSS", Locale.US)和new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)-被解析为周五2月10日15时37分14秒,而不是预期的一个太阳2月5日17时00分34秒。(427000000的纳秒部分被视为毫秒,即使只指定了 SSS)我知道这是一个迟到的答案,但我一直在研究一个类似的问题,我遇到了这个问题。
这里的问题SimpleDateFormat是期待 a java.util.Date,它没有纳秒字段。所以,它不处理这种情况。该java.sql.Timestamp中的文件说,它是一个复合java.util.Date和纳秒场。秒的日期/时间值存储在对象的日期部分。这意味着可以忽略剩余的毫秒以支持纳秒字段。在我看来,这是一个糟糕的设计,因为它java.sql.Timestamp是java.util.Date.
无论如何,为了回答这个问题,我认为在不附加到由SimpleDateFormat.
这是一种方法:
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.");
format.setTimeZone(TimeZone.getDefault()); // Set the TimeZone to whatever you are expecting.
System.out.println(format.format(timestamp) + String.format("%09d", timestamp.getNanos());
Run Code Online (Sandbox Code Playgroud)
编辑:
为纳秒字符串值添加了填充。