如何将多个日期格式的字符串转换为时区格式的时间戳

萨拉瓦纳·库马尔

我想将多个字符串日期格式转换为时间戳

例如,我有以下日期字符串,如下所示

String date1 = "2020-01-01 12:23:30.345"
String date2 = "2020-01-01 12:23:30"
String date3 = "2020-01-01 12:23"
String date4 = "2020-01-01 12"

我想将上述所有字符串格式转换为时间戳,例如,

For date1, Timestamp should be 2020-01-01 12:23:30.345 UTC
For date2, Timestamp should be 2020-01-01 12:23:30.000 UTC
For date3, Timestamp should be 2020-01-01 12:23:00.000 UTC
For date4, Timestamp should be 2020-01-01 12:00:00.000 UTC

你能帮我这个忙吗?任何信息都将非常有帮助。我无法定义解析器格式的单个字符串,因为在我的方案中字符串格式是不可预测的。

阿文德·库玛·阿维纳什(Arvind Kumar Avinash)

您可以为缺少的部分使用可选的图案(在方括号内)。您还可以使用DateTimeFormatterBuilder#parseDefaulting默认的时间缺失部分为0或任何其他值。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForFormating = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);

        // Tests
        System.out.println(getLocalDateTime("2020-01-01 12:23:30.345"));
        System.out.println(getLocalDateTime("2020-01-01 12:23:30.345").format(dtfForFormating));
        
        System.out.println(getLocalDateTime("2020-01-01 12:23:30"));
        System.out.println(getLocalDateTime("2020-01-01 12:23:30").format(dtfForFormating));
        
        System.out.println(getLocalDateTime("2020-01-01 12:23"));
        System.out.println(getLocalDateTime("2020-01-01 12:23").format(dtfForFormating));
        
        System.out.println(getLocalDateTime("2020-01-01 12"));
        System.out.println(getLocalDateTime("2020-01-01 12").format(dtfForFormating));
    }

    static LocalDateTime getLocalDateTime(String text) {
        DateTimeFormatter multiFormatter = new DateTimeFormatterBuilder()
                                            .appendPattern("uuuu-MM-dd HH[:mm][:ss][.SSS]")
                                            .parseDefaulting(ChronoField.NANO_OF_SECOND, 0)
                                            .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                                            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)                                         
                                            .toFormatter(Locale.ENGLISH);

        return LocalDateTime.parse(text, multiFormatter);
    }
}

输出:

2020-01-01T12:23:30.345
2020-01-01 12:23:30.345
2020-01-01T12:23:30
2020-01-01 12:23:30.000
2020-01-01T12:23
2020-01-01 12:23:00.000
2020-01-01T12:00
2020-01-01 12:00:00.000

更新资料

这是基于OP要求将时区与日期时间一起设置的更新。

LocalDateTime没有时区信息。为了获得时区信息,您需要将其转换为ZonedDateTime

演示:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfForFormating = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS z", Locale.ENGLISH);

        // Tests
        System.out.println(getZonedDateTime("2020-01-01 12:23:30.345"));
        System.out.println(getZonedDateTime("2020-01-01 12:23:30.345").format(dtfForFormating));

        System.out.println(getZonedDateTime("2020-01-01 12:23:30"));
        System.out.println(getZonedDateTime("2020-01-01 12:23:30").format(dtfForFormating));

        System.out.println(getZonedDateTime("2020-01-01 12:23"));
        System.out.println(getZonedDateTime("2020-01-01 12:23").format(dtfForFormating));

        System.out.println(getZonedDateTime("2020-01-01 12"));
        System.out.println(getZonedDateTime("2020-01-01 12").format(dtfForFormating));
    }

    static ZonedDateTime getZonedDateTime(String text) {
        DateTimeFormatter multiFormatter = new DateTimeFormatterBuilder()
                                            .appendPattern("uuuu-MM-dd HH[:mm][:ss][.SSS]")
                                            .parseDefaulting(ChronoField.NANO_OF_SECOND, 0)
                                            .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                                            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                                            .toFormatter(Locale.ENGLISH);

        return LocalDateTime.parse(text, multiFormatter).atZone(ZoneId.of("Etc/UTC"));
    }
}

输出:

2020-01-01T12:23:30.345Z[Etc/UTC]
2020-01-01 12:23:30.345 UTC
2020-01-01T12:23:30Z[Etc/UTC]
2020-01-01 12:23:30.000 UTC
2020-01-01T12:23Z[Etc/UTC]
2020-01-01 12:23:00.000 UTC
2020-01-01T12:00Z[Etc/UTC]
2020-01-01 12:00:00.000 UTC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将带有时区的奇怪日期时间字符串转换为时间戳(PySpark)

来自分类Dev

Teradata格式的字符串,用于将字符串转换为时间戳(6)

来自分类Dev

Pyspark列:将字符串格式的数据转换为时间戳格式

来自分类Dev

如何将hh:mm的列字符串转换为时间格式

来自分类Dev

如何将日期字符串转换为具有不同日期格式的时间戳?

来自分类Dev

Python - Pandas - 将格式为 2018-01-01 的日期列转换为时间戳的字符串版本

来自分类Dev

如何将日期时间转换为时间格式

来自分类Dev

将日期字符串转换为时间戳

来自分类Dev

如何将1970年之前的日期格式的字符串转换为Windows中的时间戳

来自分类Dev

PySpark数据帧将异常的字符串格式转换为时间戳

来自分类Dev

如何将日期字符串转换为时区特定日期?

来自分类Dev

将字符串转换为时间格式

来自分类Dev

如何将时间字符串转换为时间戳

来自分类Dev

在Python中将字符串转换为时间戳的不同格式的时间戳

来自分类Dev

如何将字符串转换为时间戳

来自分类Dev

如何将API提供的日期/时间字符串转换为可读格式?

来自分类Dev

Android如何将字符串转换为日期时间格式?

来自分类Dev

如何将日期时间字符串转换为另一种格式

来自分类Dev

将带时区的日期字符串转换为时间戳

来自分类Dev

将日期格式转换为时间戳

来自分类Dev

如何将日期和时间为AM / PM的字符串转换为24小时mysql时间戳格式

来自分类Dev

如何将C#使用的日期时间格式字符串转换为moment.js使用的格式?

来自分类Dev

如何将日期字符串从 JSON 转换为时间跨度

来自分类Dev

输入的字符串:日期转换为时间戳

来自分类Dev

(Android)如何将时间原始字符串(带时区)转换为具有相同时区的另一种字符串格式

来自分类Dev

如何将对象作为时间戳转换为格式化日期

来自分类Dev

如何将时间戳字符串转换为另一个时区的时间戳

来自分类Dev

如何使用jQuery将ISO 8601格式的日期转换为时间戳?

来自分类Dev

如何使用jQuery将ISO 8601格式的日期转换为时间戳?

Related 相关文章

  1. 1

    如何将带有时区的奇怪日期时间字符串转换为时间戳(PySpark)

  2. 2

    Teradata格式的字符串,用于将字符串转换为时间戳(6)

  3. 3

    Pyspark列:将字符串格式的数据转换为时间戳格式

  4. 4

    如何将hh:mm的列字符串转换为时间格式

  5. 5

    如何将日期字符串转换为具有不同日期格式的时间戳?

  6. 6

    Python - Pandas - 将格式为 2018-01-01 的日期列转换为时间戳的字符串版本

  7. 7

    如何将日期时间转换为时间格式

  8. 8

    将日期字符串转换为时间戳

  9. 9

    如何将1970年之前的日期格式的字符串转换为Windows中的时间戳

  10. 10

    PySpark数据帧将异常的字符串格式转换为时间戳

  11. 11

    如何将日期字符串转换为时区特定日期?

  12. 12

    将字符串转换为时间格式

  13. 13

    如何将时间字符串转换为时间戳

  14. 14

    在Python中将字符串转换为时间戳的不同格式的时间戳

  15. 15

    如何将字符串转换为时间戳

  16. 16

    如何将API提供的日期/时间字符串转换为可读格式?

  17. 17

    Android如何将字符串转换为日期时间格式?

  18. 18

    如何将日期时间字符串转换为另一种格式

  19. 19

    将带时区的日期字符串转换为时间戳

  20. 20

    将日期格式转换为时间戳

  21. 21

    如何将日期和时间为AM / PM的字符串转换为24小时mysql时间戳格式

  22. 22

    如何将C#使用的日期时间格式字符串转换为moment.js使用的格式?

  23. 23

    如何将日期字符串从 JSON 转换为时间跨度

  24. 24

    输入的字符串:日期转换为时间戳

  25. 25

    (Android)如何将时间原始字符串(带时区)转换为具有相同时区的另一种字符串格式

  26. 26

    如何将对象作为时间戳转换为格式化日期

  27. 27

    如何将时间戳字符串转换为另一个时区的时间戳

  28. 28

    如何使用jQuery将ISO 8601格式的日期转换为时间戳?

  29. 29

    如何使用jQuery将ISO 8601格式的日期转换为时间戳?

热门标签

归档