【问题标题】:Convert String to Timestamp Java将字符串转换为时间戳 Java
【发布时间】:2015-06-23 14:48:26
【问题描述】:

所以我遇到了这个我无法解决的问题。我读过提出的类似问题,但我发现格式存在问题,而且我的格式是正确的。

基本上我正在尝试将字符串转换为时间戳,但我得到了无法解析的日期错误。

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Hello {

public static Timestamp convertStringToTimestamp(String str_date) {
    try {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
        Date date = formatter.parse(str_date);
        java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
        return timeStampDate;

    } catch (ParseException e) {
        System.out.println("Exception :" + e);
        return null;
    }
}

public static void main(String[] args) {
    Timestamp ts = convertStringToTimestamp("2015-06-09 11:51:12,708");
    Timestamp ts2 = convertStringToTimestamp("2015-04-17 11:29:49.564");
    System.out.println(ts +" | "+ts2);


}

}

输出:

Exception :java.text.ParseException: Unparseable date: "2015-06-09 11:51:12,708"
Exception :java.text.ParseException: Unparseable date: "2015-04-17 11:29:49.564"
null | null

有什么想法吗?

【问题讨论】:

  • 是的,你的日期格式中有,,你的日期字符串中有.,尝试更改它,它应该可以工作
  • 你的代码在我机器上的第一次约会时工作得很好......你使用的是自定义 JRE 还是什么???
  • JavaSE-1.8 错了吗?
  • 你确定这是正确的代码吗?尝试重建它并再次运行,看起来你正在运行旧代码

标签: java timestamp parseexception


【解决方案1】:

这对我来说非常有效。

我刚刚也将正确的 pattern 作为 input 传递。

public static Timestamp convertStringToTimestamp(String str_date, String pattern) {
        try {

            SimpleDateFormat formatter = new SimpleDateFormat(pattern);
            Date date = formatter.parse(str_date);
            java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
            return timeStampDate;

        } catch (ParseException e) {
            System.out.println("Exception :" + e);
            return null;
        }
    }

    public static void main(String[] args) {
        Timestamp ts = convertStringToTimestamp("2015-06-09 11:51:12,708", "yyyy-MM-dd HH:mm:ss,SSS");
        Timestamp ts2 = convertStringToTimestamp("2015-04-17 11:29:49.564", "yyyy-MM-dd HH:mm:ss.SSS");
        System.out.println(ts +" | "+ts2);


    }

输出是:

2015-06-09 11:51:12.708 | 2015-04-17 11:29:49.564

【讨论】:

  • 是的,这是可行的,但是将格式化程序作为参数传递很麻烦,但是由于我的逗号/点实现,我理解您为什么这样做。谢谢!
  • 由于有两种模式,我遵循这种方法。希望有帮助。 :-)
  • 如果有帮助,请检查它作为答案。
【解决方案2】:

"2015-06-09 11:51:12,708" 对我有用,但 "2015-04-17 11:29:49.564" 不会。您为“,所以”指定了正则表达式。不会。这是完全正常的。

【讨论】:

    【解决方案3】:

    你需要修正逗号

    Timestamp ts2 = convertStringToTimestamp("2015-04-17 11:29:49.564");
    

    【讨论】:

      【解决方案4】:
      **Update**
      import java.sql.Timestamp;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      
      public class SomeClass {
      
          public static void main(String[] args) {
      
      
               System.out.println(convertStringToTimestamp("2015-06-09 11:51:12,708"));
               //be consistent here with , and .
               System.out.println(convertStringToTimestamp("2015-04-17 11:29:49.564"));
               System.out.println();
      
      
          }
      
          private static Timestamp  convertStringToTimestamp(String something) {
      
      
      SimpleDateFormat dateFormat = null;
              if(something.contains(".")) {
                  dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
              } 
              if(something.contains(",")) {
                  dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss,SSS");
              }
              Timestamp timestamp = null;
                  Date parsedDate;
                  try {
                      parsedDate = dateFormat.parse(something);
                       timestamp = new java.sql.Timestamp(parsedDate.getTime());
      
                  } catch (ParseException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
      
                  return timestamp;
          }
      
      
      
      }
      

      【讨论】:

      • @Jesper 它解决了这个“Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());”的问题有那么难理解吗?
      • 但这与 OP 已经发布的内容没有什么不同。 (仔细看问题中的代码)。
      • 因此,如果您将模式直接输入到 dateFormat.parse() 中,则此方法有效。但是,使用您的解决方案并尝试拟合输入的字符串仍会返回 parseException,而忽略“,”或“。 ' (逗号)
      • @jensd 我已经更新了代码......这个代码应该可以工作你必须与','和'。'更加一致因为在格式中我们指定了 ','
      • 是的,这有效,其他一些提交的示例也有效。谢谢。
      猜你喜欢
      • 2013-09-25
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      相关资源
      最近更新 更多