Java 使用SimpleDataFormat分析日期
我在oracle db中有一列,数据类型如下Java 使用SimpleDataFormat分析日期,java,simpledateformat,Java,Simpledateformat,我在oracle db中有一列,数据类型如下 data type = TIMESTAMP(6) WITH TIME ZONE 我将其导出到CSV,然后使用Java代码解析CSV 样本日期:2014年1月10日12.48.00.000000000 AM 用于分析日期的简单日期格式:dd MMM yy K.mm.ss.000000000 a 问题是上述日期转换为Fri 1月10日12:48:00 PST 2014 它被转换为下午的12.48(本来应该是00.48) 编辑: 如果我使用dd-MMM-
data type = TIMESTAMP(6) WITH TIME ZONE
我将其导出到CSV,然后使用Java代码解析CSV
样本日期:2014年1月10日12.48.00.000000000 AM
用于分析日期的简单日期格式:dd MMM yy K.mm.ss.000000000 a
问题是上述日期转换为Fri 1月10日12:48:00 PST 2014
它被转换为下午的12.48
(本来应该是00.48
)
编辑:
如果我使用dd-MMM-yy K.hh.ss.000000000 a或dd-MMM-yy K.mm.h.000000000 a
我得到
太阳2014年1月12日00:00:00太平洋标准时间,这也是错误的
有什么问题吗?您确定您使用的是“K”吗?因为java文档说capitak K K值在(0-11)之间,所以我现在不知道如何得到12。 资料来源:
我建议使用Locale.getDefault()或任何其他值。如果您的日期字符串具有
“AM/PM”
,并且您的小时范围为01-12
,则应使用h
解析小时
您可以尝试使用
dd MMM yy hh.mm.ss.000000000 a
作为输入格式。如果您看到K
的文档(SimpleDateFormat
),其范围是0-11
,因此解析失败。您的JVM和Oracle时区是什么?PST,但这不重要,因为我正在读取csvyes中的数据。但是我的csv文件的值为10-JAN-14 12.48.00.000000000,请输入您需要的模式,例如“mm:ss.0000”或者你需要什么,但在我看来它应该有用。谢谢你的否决票,我想这是不必要的。顺便说一句,我没有否决票。。它在java.text.DateFormat.parse(DateFormat.java:337)处抛出一个运行时异常:不可解析的日期:“10-JAN-14 12.48.00.000000000 AM”,因为您有时间戳,所以您可以使用新日期(时间戳),然后格式化它。但是,如果数据库服务器位于不同的时区,就会出现一些混乱(这种情况发生在我身上)。我不知道oracle是如何给你时间戳的(我从来不喜欢)。dd-MMM-yy K.hh.ss.000000000是一个错误的模式,K和h代表小时,你应该只使用其中一个
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");