【问题标题】:How to convert milliseconds into Timestamp using Talend如何使用 Talend 将毫秒转换为时间戳
【发布时间】:2020-07-01 12:38:11
【问题描述】:

我有 csv 文件,其中 time_column 以毫秒为单位,我想要时间戳(日期和时间)。我有超过 100 行需要转换。

Input :

1587740000000
1590600000000 
1588880000000
1589040000000
1589040000000

Output:
24-04-2020 20:23:20
27-05-2020 22:50:00
08-05-2020 01:03:20
09-05-2020 21:30:00
09-05-2020 21:30:00

【问题讨论】:

标签: timestamp etl talend milliseconds


【解决方案1】:

我不确定,但这可能会有所帮助

Converting a Unix timestamp to a readable date- Talend

使用 Java:-

//As string
String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date(epoch*1000));
//Epoch in seconds, remove '*1000' for milliseconds.

//As Date
java.util.Date date= new java.util.Date(epoch*1000);
//Epoch in seconds, remove '*1000' for milliseconds.

【讨论】:

  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。
  • 当然@OleV.V.但SimpleDateFormat 仍然被广泛使用和教授。
  • 如果是这样,那就是问题所在。不要成为那个问题的一部分。
【解决方案2】:

您可以使用 tJava 或 tJavaflex 以简单的方式完成此操作。 下面是代码,

long Milliseconds = 1587740000000L;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
System.out.println(sdf.format(new Date(Milliseconds)));

您也可以从中创建例程并将其用作 tMap 中的函数

【讨论】:

    【解决方案3】:

    如果您对 Java 中的解决方案感到满意,请选择 java.time,这是现代 Java 日期和时间 API。在其他几个答案中建议的 SimpleDateFormat 班级是班级臭名昭著的麻烦制造者,请帮助自己远离它。

        DateTimeFormatter millisecondFormatter = new DateTimeFormatterBuilder()
                .appendValue(ChronoField.INSTANT_SECONDS)
                .appendValue(ChronoField.MILLI_OF_SECOND, 3)
                .toFormatter();
        
        String[] timeStringsFromCsv = {
                "1587740000000",
                "1590600000000",
                "1588880000000",
                "1589040000000",
                "1589040000000"
        };
        
        for (String timeString : timeStringsFromCsv) {
            ZonedDateTime dateTime = millisecondFormatter
                    .parse(timeString, Instant::from)
                    .atZone(ZoneId.systemDefault());
            System.out.println(dateTime);
        }
    

    输出:

    2020-04-24T20:23:20+05:30[Asia/Colombo]
    2020-05-27T22:50+05:30[Asia/Colombo]
    2020-05-08T01:03:20+05:30[Asia/Colombo]
    2020-05-09T21:30+05:30[Asia/Colombo]
    2020-05-09T21:30+05:30[Asia/Colombo]
    

    如您所见,我在运行代码时将 JVM 的默认时区设置为亚洲/科伦坡。如果您的时区不同,您的结果也会不同。

    如果您需要将输出格式化为新字符串,请使用第二个DateTimeFormatter

    链接: Oracle tutorial: Date Time 解释如何使用 java.time。

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 2013-03-09
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多