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

时间:2018-08-09 14:52:13

标签: java date datetime talend data-conversion

我从文件中收到了以下格式的日期:“ EEE MMM dd hh:mm:ss z yyyy”,并且我正在尝试将此值转换为Date“ 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"

我该如何解决?

非常感谢!

2 个答案:

答案 0 :(得分:1)

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

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中)的输入值直接传递给tJavaRowinput_row.newColumn中,然后使用SimpleDateFormat类解析和格式化日期根据格式设置模式。

了解更多here

答案 1 :(得分:0)

如果要将日期转换为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,就可以将其转换为任何格式。正如问题所预期的那样,然后只需在LocalDate对象上调用toString()。

LocalDate curr = LocalDate.now();

System.out.println(curr.toString());

它将显示类似“ 2019-11-20”的日期。

希望这对某人有帮助。