Java 使用SimpleDataFormat分析日期

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-

我在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-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");