gpt4 book ai didi

java - 有没有一种简单的方法可以将包含秒和毫秒的时间戳值更改为包含小时和分钟的时间戳值?

转载 作者:行者123 更新时间:2023-12-02 00:45:27 24 4
gpt4 key购买 nike

所以我有一个对象(“任务”),它有一个属性“开始日期”,它基本上是一个时间戳对象。所以这个日期的格式是“YYYY/MM/dd hh:mm:ss:ms”。但对于我正在编写的测试用例,我需要此日期采用“YYYY/MM/dd hh:mm”格式。它还需要是一个时间戳对象,因为我必须将此值设置回“任务”对象。

我尝试了几种方法,包括下面显示的代码片段:

SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd hh:mm");
if (task.getStartDate() != null) {
String newDate = formatter.format(task.getStartDate());
Date date = formatter.parse(newDate);
task.setStartDate(new Timestamp(date.getTime()));
}

我预计时间戳值的格式为“2018-12-30 09:54”,但结果是“2018-12-30 09:54:00.0”。所以我想到的问题是:

  1. 有没有办法不考虑 Timestamp 对象中的秒和毫秒?
  2. 如果不是,那么该代码段是否提供了更新 Timestamp 对象的有效方法?

最佳答案

TL;DR

  1. 如果可以的话,避免使用 Timestamp 类。它设计得很糟糕,而且已经过时了。
  2. 回答你的问题,不,Timestamp 还没有,因为不能有格式(对于它的现代替代品 Instant 也是如此(或者LocalDateTime))。
  3. 在任何情况下都应避免使用 SimpleDateFormatDate。尤其是前者是出了名的麻烦,而且两者也早已过时。

不要将格式放入模型类中

您不应该想要具有特定格式的InstantTimestamp。除了最简单的一次性程序之外,所有的良好实践都是使用户界面与模型和业务逻辑分开。 Instant 对象的值属于您的模型,因此请将您的 InstantTimestamp 保留在那里,并且永远不要让用户直接看到它。我希望您清楚 2018-12-30 09:542018-12-30 09:54:00.0 代表相同的值、相同的 时间戳。就像 17 一样,0017 和 0x11 代表相同的整数值。当您遵循我所说的时,Instant 采用哪种格式就不再重要了。

每当用户应该看到日期和时间时,这都会发生在 UI 中,而不是模型中。将其格式化为 String 并向用户显示该字符串。同样,如果您需要特定的格式来持久保存或与其他系统交换,请将 Instant 格式化为字符串以实现此目的。

java.time 和 JDBC 4.2

对于通过 JDBC 与数据库进行交换,如果您有 JDBC 4.2 兼容的驱动程序,则更愿意使用 java.time 中的类型而不是 Timestamp。如果数据库端的数据类型是timestamp with time zone,非常明确地建议使用时间戳,请传递一个OffsetDateTime,例如

   OffsetDateTime dateTime = yourInstant.atOffset(ZoneOffset.UTC);
yourPreparedStatement.setObject(4, dateTime);

使用setObject,而不是setTimestamp。某些驱动程序直接接受 Instant,而不转换为 OffsetDateTime。如果在数据库端您只需要一个时间戳(没有时区),请使用Java中的LocalDateTime代替,并在同一时间将一个传递给setObject方法如上。

PS 您的格式模式字符串中有错误

在格式模式字符串中,大写的 YYYY 表示基于周的年份,并且仅对周数有用。对于年份,请使用 uuuu 或小写的 yyyy。同样,小写 hh 表示 AM 或 PM 内从 01 到 12 的小时,并且仅与 AM 或 PM 标记一起使用。对于一天中从 00 到 23 的小时,您需要大写的 HH。在大多数情况下,这些错误会给您提供不正确的日期和时间。使用错误的格式模式字母大小写是一个非常常见的错误。 SimpleDateFormat 通常不介意,它只是给出不正确的结果。现代的 DateTimeFormatter 在通知您此类错误方面做得更好。

链接

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

相关问题

关于java - 有没有一种简单的方法可以将包含秒和毫秒的时间戳值更改为包含小时和分钟的时间戳值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com