【问题标题】:Convert epoch in string format to just a date without timestamp将字符串格式的纪元转换为没有时间戳的日期
【发布时间】:2020-09-14 02:23:00
【问题描述】:

我正在从 API 接收纪元时间的日期。它们是字符串格式,我想要简单地将其转换为没有小时、分钟和秒的日期,格式为 dd / mm / yyyy。示例:

  String epochDate = "1590476643";

我只是想用时间戳转换它,我用这个逻辑得到这个结果。我得到一个 1970 年的日期,纪元时间从昨天 5 月 26 日开始。

Date d = new Date(Long.parseLong(epochDate));
Timestamp ts= new Timestamp(d.getTime());

RESULT = 1970-01-19 10:47:56 SHOULD BE 26-05-2020

如何将字符串转换为日期和格式?

【问题讨论】:

  • date without hours, minutes, and seconds, with the format dd / mm / yyyy 作为字符串?
  • 不,作为日期。它是数据库中的日期格式,我必须保存它。
  • 什么数据库?它是仅存储java.util.Date 还是可以存储java.time.LocalDate
  • 如果你只存储date可以使用LocalDate,看看转化stackoverflow.com/questions/35183146/…
  • 一个甲骨文数据库。我认为它可以存储两者,当然。在 bbdd 中输入 DATE。

标签: java spring spring-boot


【解决方案1】:

LocalDate 仅用于存储日期,Instant.ofEpochSecond 用于转换

LocalDate localDate = Instant.ofEpochSecond(Long.parseLong("1590476643")).atZone(ZoneId.systemDefault()).toLocalDate();

并格式化为字符串

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedString = localDate.format(formatter);

【讨论】:

  • 这基本上是我的回答,不知道谁更早......但很高兴在一行中看到它;-)
  • 谢谢大家,这就是解决方案。任何想法将其格式化为 dd/mm/yyyy?
  • @Stapler23 序列化为字符串时需要格式化,保存到数据库不需要格式化,我添加了如何格式化为字符串
  • 在您的空闲时间尝试阅读这里stackoverflow.com/help/someone-answers
【解决方案2】:

您可以使用 java.text 包中的 DateFormat 和 SimpleDateFormat,

String epochDate = "1590476643";
Date d = new Date(Long.parseLong(epochDate));
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String epochDateString = formatter.format(d);

【讨论】:

  • 感谢您的评论。当纪元时间从昨天开始时,我一直得到这个日期1970-01-19 00:00:00。你知道这是怎么回事吗?而且不是我想要的格式
【解决方案3】:

我强烈建议您使用 java.time 并避免使用 java.util 进行日期时间操作。
您的纪元秒数 String 可以像这样变成 java.time.LocalDate

public static void main(String[] args) {
    // you seem to receive a datetime in epoch seconds
    String epochDate = "1590476643";
    long epochDateAsLong = Long.parseLong(epochDate);
    // so create an object representing a moment in time from the epoch seconds as long
    Instant instant = Instant.ofEpochSecond(epochDateAsLong);
    // create a LocalDateTime object from that instant and apply a desired time zone
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("UTC"));
    // create a LocalDate from this LocalDateTime (that means taking just the date part of it)
    LocalDate localDate = localDateTime.toLocalDate();
    // and print it
    System.out.println(localDate);

    // if you really need a Date, then use legacy compatibility, but try to avoid it
    Date date = Date.from(instant);

    // printing outdated class omitted...
}

然后会输出

2020-05-26

您可以使用DateTimeFormatter 更改输出格式。

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 2012-04-03
    • 2018-02-18
    • 2015-07-02
    • 2018-08-07
    • 2015-01-23
    • 2012-11-22
    • 2014-11-18
    • 2016-07-23
    相关资源
    最近更新 更多