gpt4 book ai didi

java - 有没有一个 Java 库可以完成 php date_modify 的功能?

转载 作者:行者123 更新时间:2023-12-02 06:13:02 25 4
gpt4 key购买 nike

我似乎找不到一种好方法来从包含任意修饰符(例如“+3days”)的字符串中操作 Date 对象,如 http://www.php.net/manual/en/datetime.formats.relative.php 中所述。 。我在标准 Java API 中找不到任何内容,在 Joda-Time 中也找不到任何内容。 .

最佳答案

由文本定义的时间平移

如果您想添加或减去文本定义的时间跨度,有一个官方标准,ISO 8601 。该标准定义了 Duration 的文本格式。 PnYnMnDTnHnMnS,其中 P 表示周期,后跟年、月、日、时、分、秒数。中间的 T 将时间部分与日期部分分开。

示例:

  • P4Y = 4 年
  • P1DT12H = 一天半
  • PT1H30M = 一个半小时

Joda-Time库默认使用 ISO 8601,包括此语法。 Period class在其构造函数中接受这样一个字符串,并使用 ISOPeriodFormat 自动解析它。 .

String input = "P3D"; // 3 days. Three hours would be "PT3H", as another example.

// Get current date-time.
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" );
DateTime now = new DateTime( timeZone );

// Shift from current date-time by a Period specified by ISO "Duration" string.
// Yes, these date-time terms (period, duration, interval) are all mixed up.
// An effort to standardize such terms is underway. But for now, get used to it and "translate".
Period period = new Period( input );
DateTime dateTime = now.plus( period );

转储到控制台...

System.out.println( "now: " + now );
System.out.println( "period: " + period );
System.out.println( "dateTime: " + dateTime );

运行时...

now: 2014-02-11T23:02:10.087-10:00
period: P3D
dateTime: 2014-02-14T23:02:10.087-10:00

第一个、最后一个、下一个

搜索 StackOverflow 来查找许多关于使用 Joda-Time 查找月初、周开始和结束等问题的答案。提示:使用缩写词“joda”进行搜索,因为很少有人输入正确的名称,Joda-Time

一些解决方案几乎是内置的,例如访问日期属性并调用 withMinimumValue() 来获取第一个月。其他人需要几行代码,您可以将它们放入自己的便捷方法中。

“下周六”等也是如此。

提示:

  • 不要忘记/忽略时区
    例如,一天何时开始的定义取决于时区。
  • 不要忘记区域设置
    例如,一周的第一天取决于区域设置。
  • 不要忘记DateTime 有一个时间
    当考虑整天但实际使用 DateTime 实例时,请记得调用 withTimeAtStartOfDay方法。忽略与“Midnight”相关的类,因为“withTimeAtStartOfDay”旨在替换它们。

关于java - 有没有一个 Java 库可以完成 php date_modify 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720713/

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