【问题标题】:parse string into date format将字符串解析为日期格式
【发布时间】:2015-08-21 15:57:03
【问题描述】:

我正在通过 opencsv 从 csv 文件导入数据以插入 mysql 数据库。 opencsv 作为字符串导入,对于数据库中的 1 个字段,我需要将其解析为日期格式:yyyy-MM-dd。但是我收到一个错误。

// This is the string that I have extracted from the csv file           
String elem1 = nextLine[0];

// printing out to console I can see the string I wish to convert
System.out.println(elem1); => 2015-08-14

// Below is my code to parse the date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date convertedCurrentDate = sdf.parse(elem1);
String date=sdf.format(convertedCurrentDate );

// printing date to console gives me 2015-08-14
System.out.println(date);

如上所述,将日期打印到控制台给了我 2015-08-14。但是我得到了错误:

java.text.ParseException: Unparseable date: "" 

有人可以就我做错了什么给我一些建议吗?

'java.util.Date convertCurrentDate = sdf.parse(elem1);'这一行是导致错误的行。

谢谢!

【问题讨论】:

  • 你能指出是哪一行导致了错误吗?是不是:java.util.Date convertCurrentDate = sdf.parse(elem1);谢谢
  • 嘿堆栈播放器。是的,就是这样。我已经编辑了原始问题以包含该详细信息。
  • 那么elem1在那个时候显然是一个空白字符串(很明显,因为错误消息是这样说的)。
  • 您使用的是什么版本的 Java?我知道这可能不是这里的问题,但在 Java7 文档中我没有看到 parse(String) only parse(string, Parseposition) ? docs.oracle.com/javase/7/docs/api/java/text/…(编辑和 Java6 & 8)
  • 嘿安德烈亚斯,好的,但是我在解析代码之前打印了 elem1 的值,它是正确的。我还在解析代码之后打印日期变量,它也给了我日期。所以我不明白这是一个空白字符串。

标签: java date opencsv string-to-datetime


【解决方案1】:

我的机器上的以下测试也让我感到难过

public class DateFormatterTest {

private static final String TEST_DATE = "2015-08-14";

   @Test
   public void SimpleDateFormatTest() throws ParseException {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      java.util.Date convertedCurrentDate = sdf.parse(TEST_DATE);
      String date=sdf.format(convertedCurrentDate );
      assertEquals(TEST_DATE, date);
   } 

}

您运行的是什么版本的 Java?我知道最新的 java 8 (8u61) 和 JodaTime 存在问题。

还可以尝试上面的测试,该测试消除了除日期代码之外的所有内容。

【讨论】:

    【解决方案2】:

    这是一个简单的例子:

    SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
    String dateInString = "7-Jun-2013";
    try {
        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatter.format(date));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    

    Java 8 更新

    String string = "August 21, 2015";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
    LocalDate date = LocalDate.parse(string, formatter);
    System.out.println(date); // 2015-09-21
    

    我想这就是你想要的。很高兴为您提供帮助,谢谢

    【讨论】:

    • 嘿阿南德 - 感谢您的回复。我尝试了您的建议,但出现错误:无法在索引 0 处解析文本“2015-08-14”。csv 文件中的日期格式为 yyyy-MM-dd。所以我将上面的代码更新为: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM, dd", Locale.ENGLISH);但这给了我一个错误:无法在索引 4 处解析文本“2015-08-14”。-有什么想法吗?
    • 首先检查系统日期格式,然后检查您在代码上提供的相同格式
    • 我想你的意思是我的 mac 上的日期格式?检查它,它的格式相同 - 2015-08-21。时间采用 24 小时制。不确定这是否重要。
    • 由于你的 mac 显示为 2015-08-21 并且你在 2015 年 8 月 21 日或 2013 年 6 月 7 日通过,可能会产生问题。
    • 不,我通过格式 - 2015-08-14。将其列在原始问题中。 “System.out.println(elem1); => 2015-08-14” - 所以,是的。在这个阶段我很困惑。 :-(
    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多