向日期时间添加间隔



我想在java中实现类似的操作:

time = "2014-05-19 13:36:05"
interval = "60 (seconds)"
time - interval = "2014-05-19 13:35:05"

Java,在以下约束下表达这一点的最佳方法是什么:

  • 日期时间是格式化字符串。

  • 间隔为整数。

  • 计算的时间也应该是日期时间格式的字符串。

你应该使用"Date"对象,在做减法时,它基本上表示一个时间实例(自Unix纪元以来的毫秒数(。一旦你有一个"Date"对象,你可以使用"getTime"方法(http://docs.oracle.com/javase/7/docs/api/java/util/Date.html#getTime(((来获取这个毫秒值,并减去60秒(确保使用毫秒而不是秒!(,然后用这个结果值创建一个新的"Date"。

这是一种方法。有很多,乔达图书馆也相当受欢迎。它有一个从其日期表示中减去毫秒的方法,http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minusSeconds(int(。

尝试使用 joda-time 库。

下面是用于分析日期字符串的类。

用:

dateTime.minusSeconds(int sec);

减去间隔的方法。

java.time

现代的方式是使用java.time类。

不要将时间点(时刻(与时间跨度(持续时间(混为一谈。避免使用时间表示法表示时间跨度,因为这会造成歧义和混乱。使用标准 ISO 8601 格式的字符串表示持续时间:PnYnMnDTnHnMnS

不要将日期时间值(对象(与字符串表示形式混为一谈。日期时间对象可以分析或生成字符串,但与字符串不同且独立。

java.time 框架包含丰富的各种日期时间类。使用它们将数据表示为对象,而不仅仅是数字和字符串。

默认情况下,java.time 类使用标准 ISO 8601 格式的字符串。

String input = "2014-05-19T13:36:05" ;
LocalDateTime ldt = LocalDateTime.parse( input );
Duration d = Duration.ofSeconds( 60 );
LocalDateTime later = ldt.plus( d );

ld.toString((: 2014-05-19T13:36:05

d.toString((: PT1M

later.toString((: 2014-05-19T13:37:05

请参阅 IdeOne.com 中的实时代码。

请注意,LocalDateTime缺少时区或 UTC 偏移量的任何概念。所以这并不代表时间轴上的一个时刻。应用区域或偏移(如果您知道是有意的(。已经在堆栈溢出上多次覆盖;搜索OffsetDateTimeZonedDateTime

至于数据库和SQLite,还有许多其他问题和答案已经在处理这个问题。您的 JDBC 4.2 驱动程序可以直接处理 java.time 类型的转换。如果没有,请使用标准 ISO 8601 格式存储为字符串。


关于 java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅 Oracle 教程。并搜索堆栈溢出以获取许多示例和解释。规范为 JSR 310。

从哪里获得java.time类?

  • Java SE 8SE 9 及更高版本
    • 内置。
    • 具有捆绑实现的标准 Java API 的一部分。
    • Java 9添加了一些小功能和修复。
  • Java SE 6SE 7
    • 许多java.time功能在ThreeTen-Backport中向后移植到Java 6和7。
  • 人造人
    • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述(。
    • 请参阅如何使用...

ThreeTen-Extra项目通过额外的类扩展了java.time。这个项目是未来可能添加到java.time的试验场。你可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

您应该只使用字符串的日期对象。仅当您想要显示日期时,才将日期格式化为字符串。

使用 Date 对象,您将能够获取以 ms 为单位的值并对其进行计算。您还可以使用"日历"来细分日期。

您不应该使用String对象,而应该使用Date。仅当要显示日期时,才设置日期格式。

Date originalDate = new Date();
long diff = 60 * 1000; // milliseconds!
Date diffedDate = new Date(originalDate.getTime() - diff);

如果你真的想以字符串方式(你不应该这样做(,你可以像这样解析日期字符串:

String originalDateString = getDateTime(); // your current function
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date badlyDesignedOriginalDate = dateFormat.parse(originalDateString);
long diff = 60 * 1000; // milliseconds!
Date diffedDate = new Date(badlyDesignedOriginalDate.getTime() - diff);

但同样,你不应该这样做。

你可以使用这样的东西:

长分钟=1000*60;日期 日期1 = 新日期((;当前日期日期日期2 = 新日期(日期1.getTime(( - 分钟(;新日期,早 1 分钟
或其他方法长分钟=1000*60;日期 日期1 = 新日期((;date1.setTime(date1.getTime(( - 分钟(;

Date 适用于自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒,因此您可以像正常数字一样减去它。

相关内容

  • 没有找到相关文章

最新更新