代码之家  ›  专栏  ›  技术社区  ›  SaCvP

Talend-在“yyyy-mm-dd”中转换“EEE-MMM-dd hh:mm:ss z-yyy”

  •  -1
  • SaCvP  · 技术社区  · 7 年前

    我从一个文件中接收到一个日期,格式为:“EEE m m m dd hh:mm:ss z yyy”,我正试图将此值转换为日期“yyyy mm dd”。我用的是:

    TalendDate.parseDate("yyyy/MM/dd", TalendDate.formatDate("yyyy/MM/dd", TalendDate.parseDate("EEE MMM dd hh:mm:ss z yyyy",context.date)))
    

    context.date定义如下:

    context.date = input_row.mtime_string;
    

    但是,当我运行JavaRow组件时,会得到以下错误:

    组件tJavaRow_1中出现异常

    "java.lang.RuntimeException: java.text.ParseException: Unparseable date: "Thu Aug 09 10:38:45 BST 2018"
    

    我该怎么解决?

    非常感谢!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Abhishek    7 年前

    您可以使用下面的代码片段实现格式-

    System.out.println(input_row.newColumn);
    SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy", Locale.ENGLISH);
    Date date = parserSDF.parse(input_row.newColumn);
    String dDate = null; 
    parserSDF = new SimpleDateFormat("yyyy-MM-dd");
    dDate = parserSDF.format(date);
    System.out.println(dDate);
    

    此外,还需要导入以下库(tJavaRow的高级设置部分)-

    import java.text.SimpleDateFormat;
    import java.util.Locale;
    import java.util.Date;
    

    我直接从文件传递了输入值(在我的场景中 tFileInputDelimited )进入 tJavaRow 作为- input_row.newColumn 然后使用 SimpleDateFormat 类根据格式化模式解析和格式化日期。

    阅读更多 here .

        2
  •  0
  •   Atul    6 年前

    如果要将日期转换为LocalDate,下面的代码可能会有所帮助:

    private LocalDate getLocalDate(String date){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss z yyyy", Locale.getDefault());
            return LocalDate.parse(date, formatter);
        }
    

    一旦获得LocalDate,就可以将其转换为任何格式。正如问题所期望的yyyy-MM-dd,那么只需对LocalDate对象调用toString()。

    LocalDate curr = LocalDate.now();
    
    System.out.println(curr.toString());
    

    它将显示日期,如“2019-11-20”。

    希望这对某人有帮助。