0

我有以下代码片段

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());

我将日期解析为 Tue Apr 10 00:53:28 IST 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 根据回复我应该在第 1 行得到 02:34:38.899,因为日期格式是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
4

4 回答 4

5

dateFormat像这样定义你

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

HH而不是hh. 请参见SimpleDateFormat

于 2012-04-10T07:48:34.957 回答
1

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

hh是上午/下午HH的小时数,而是一天中的小时数(那是您错误的地方)。见SimpleDateFormat

于 2012-04-10T07:48:50.897 回答
1

根据Date.toString()Timestamp.toString的定义,.toString()输出始终使用 24 小时制。如果要使用 AM/PM 显示时间,则应使用 dateformatter 打印日期。由于您使用相同的日期/时间作为两者的来源(strDate将使用 14:34),当您解析日期时,SimpleDateFormat使用 12 小时制时钟是“宽松的”,并允许将 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...
于 2012-04-10T09:33:37.787 回答
-1

试试下面的代码:

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 日期 date = fmt.parse("yourdate"); SimpleDateFormat fmtOut = new SimpleDateFormat("dd-MM-yyyy hh:mm a");String myDate = fmtOut.format(date);

如果您的日期是 2016-06-10 12:06:43,那么输出将是 10-06-2016 12:06 pm。

于 2016-06-10T06:39:58.990 回答