繁体   English   中英

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

[英]Talend - Transform "EEE MMM dd hh:mm:ss z yyyy" in "yyyy-MM-dd"

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

我该如何解决这个问题?

非常感谢!

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

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;

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

在这里阅读更多。

如果您想将日期转换为 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”的日期。

希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM