2012-04-10 31 views
0

我有下面的代码片段问题我面临dateFormat.parse(字符串)?

SimpleDateFormat dateFormat = new SimpleDateFormat(
     "yyyy-MM-dd hh:mm:ss.SSS"); 
String processedContentDate="2012-04-10 12:53:28.033"; 
java.util.Date parsedDate = dateFormat.parse(processedContentDate); 
java.sql.Timestamp timestamp = new java.sql.Timestamp(
parsedDate.getTime()); 

我得到解析日期星期二4月10日0点53分28秒北京时间2012年和时间戳为2012-04-10 00:53:28.033。 我想得到的时间完全是12:53:28.033(如我的原始字符串) 不是00:53:28.033。不明白为什么12:53:28正在转换为00:53:28。我应该怎么做才能得到12:53:28?

编辑:获得响应后,我试图这个小程序,其中当前时间是14:34:38.899 但在两行即在第1行和第2行,我得到下面解析日期 2012-04- 10 14:34:38.899 按回复我应该拿02:34:38.899,在1号线的日期格式为yyyy-MM-dd hh:mm:ss.SSS")

java.util.Date date= new java.util.Date(); 
    String strDate=date.toString(); 
    java.util.Date parsedDate; 
    java.util.Date parsedDate2; 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
    "yyyy-MM-dd hh:mm:ss.SSS");// line 1 
    SimpleDateFormat dateFormat2 = new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss.SSS");//line 2 
    try { 
     java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime()); 
      strDate=timestamp.toString(); 


      parsedDate = dateFormat.parse(strDate);//line1 
      parsedDate2 = dateFormat2.parse(strDate);//line2 
+2

你的dateFormat变量是如何定义的? – jagill 2012-04-10 07:46:53

回答

5

定义您dateFormat

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

HH而不是hh。请参阅SimpleDateFormat

+0

嗨juergen.Do你想了解我编辑的部分? – 2012-04-10 09:10:20

+0

@MSach:时间'12:00:00'可以解释为正午或午夜。但'14:00:00'并不含糊。这就是为什么它对两者都有效。 12点以上的任何时间都不是令人难忘的。 – 2012-04-10 09:21:43

+0

令人惊异的fact.it意思是hh:mm:ss格式,12到1之间的任何东西都将被视为AM,这就是为什么它将12.30转换为0.30。对?另一个有趣的事实与格式hh:mm:ss,我将如何确定它是上午或下午。像7.30可以是上午或下午。 – 2012-04-11 04:45:38

1

您的日期格式必须是yyyy-MM-dd HH:mm:ss.SSS

hh是am/pm的小时数,而HH是一天中的小时数(这是您误认的地方)。见SimpleDateFormat

+0

与HH:mm:ss.SSS,如果我有时间字符串为“00:53:28.033”,那么我将得到解析日期为“00:53:28.033”,但如果时间字符串是“12:53:28.033”我会把它作为“12:53:28.033”。所以无论我在字符串中传递的是什么格式。对? – 2012-04-10 07:55:03

+0

不,如果您使用'hh',第一个示例将在'am'中,而第二个示例将在'pm'中。 – 2012-04-10 07:57:52

+0

谢谢精英绅士们。 java.util.Date的另一个问题date = new java.util.Date(); java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());我们得到HH:mm:ss.SSS的时间戳。格式。那是对的吗?这就是我在我的dubugger atleast看到的。 – 2012-04-10 08:15:47

1

按照Date.toString()Timestamp.toString的定义,.toString()输出总是使用24小时制。如果您想使用AM/PM显示时间,则应使用dateformatter打印日期。由于您使用相同的日期/时间作为两者的来源(strDate将使用14:34),因此在解析日期时,使用12小时制的SimpleDateFormat为“宽松”,并且允许解析14个小时。

如果设置

dateFormat.setLenient(false); 

你可能会发现,dateFormat.parse(strDate)将失败。

要打印日期,我绝不会依赖toString,但始终使用格式化程序。

System.out.println(dateFormat.format(parsedDate)); // should show ...02:36... 
System.out.println(dateFormat2.format(parsedDate)); // should show ...14:36... 
System.out.println(dateFormat.format(parsedDate2)); // should show ...02:36... 
System.out.println(dateFormat2.format(parsedDate2)); // should show ...14:36... 
+0

它表示hh:mm:ss格式,12到1之间的任何值都将被视为AM,这就是为什么它将12.30转换为0.30。对?另一个有趣的事实与格式hh:mm:ss,我将如何确定它是上午或下午。像7.30可以是上午或下午 – 2012-04-11 04:47:55

+0

你需要格式化字符串中的上午/下午标记,所以格式应该是'hh:mm:ss a',它可以让你解析'02:36:00 am'和'02:36:00 pm'。 – beny23 2012-04-11 07:38:01

+0

beny23假设当前时间是12.30,我有这个代码java.util.Date date = new java.util.Date(); String strDate = date.toString();我想要的是它也告诉我它是不是它是am或pm?我在调试器中没有在parsedDate变量中的任何地方看到这个信息 – 2012-04-11 10:47:54

-1

尝试以下代码:

的SimpleDateFormat FMT =新的SimpleDateFormat( “YYYY-MM-DD HH:MM:SS”); 日期日期= fmt.parse(“yourdate”); (日期);日期(日期);字符串myDate = fmtOut.format(date);字符串myDate = fmtOut.format(日期);

如果yourdate是2016-06-10 12:06:43,那么输出将是10-06-2016 12:06 pm。