gpt4 book ai didi

java - 规则直到标签数据值

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:08 25 4
gpt4 key购买 nike

我正在一个项目,该项目需要有规则才能产生下一个事件。但是我不明白我需要在UNTIL的rrule标签中添加什么。

String str="RRULE:FREQ=MONTHLY;UNTIL=20190625T000000Z;INTERVAL=2;";


idk如何将日期转换为 "20190625T000000Z"。我正在使用RFC 2445 Java库。如果用户以字符串形式输入日期,例如: 25/06/2019......我需要在UNTIL标记中设置该值,如上所示。如果我在UNTIL中设置默认值,那么它将起作用,但是当我将其设置为用户友好时将不起作用。.我将用户的所有值都用作开始日期,结束日期,间隔,Byday,Until ...但是idk是什么值在UNTIL中设置。
如果有人可以帮助..在此先感谢。

最佳答案

解析基本的ISO 8601格式

您输入的20190625T000000Z是标准ISO 8601格式的“基本”变体,用于表示UTC中的时刻。 “基本”一词的意思是尽量减少使用分隔符(我不建议这样做,因为这会使字符串对人类的可读性降低)。

定义格式化模式以匹配输入。

String input = "20190625T000000Z";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMdd'T'HHmmssX" );
OffsetDateTime odt = OffsetDateTime.parse( input , f );


转储到控制台。

System.out.println("odt.toString(): " + odt);


参见此 code run live at IdeOne.com


  odt.toString():2019-06-25T00:00Z


将日期翻译成时刻


  如果用户以字符串形式输入日期,例如:25/06/2019 ......我需要在UNTIL标签中设置此值,如上所示


首先,将输入字符串解析为 LocalDate,表示仅日期的值,没有日期和时区。

DateTimeFormatter fDateOnly = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "25/06/2019" , fDateOnly );



  ld.toString():2019-06-25


至于将该日期转换为一个时刻(某个区域中带有日期时间的日期或从UTC偏移的日期),这比直观上要棘手。

例如2019年6月25日的日期代表一整天。还有一个理论日期。一天开始和结束的时刻在全球各地时区有所不同。新的一天在日本东京比在法国巴黎更早开始,甚至在蒙特利尔魁北克也开始。

另一个问题是,一天并非总是从00:00:00开始。由于诸如夏令时(DST)之类的异常,某些区域中某些日期的一天的第一时刻可能类似于01:00:00。让java.time类确定第一时刻。

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ld.atStartOfDay( z );



  zdt.toString():2019-06-25T00:00 + 01:00 [非洲/突尼斯]


ZonedDateTime对象表示特定时刻。但是它使用的是特定地区(时区)的人们所采用的挂钟时间。您的目标是在UTC中度过片刻。幸运的是,我们可以通过转换为 OffsetDateTime(日期和时间具有从UTC偏移的时间而不是时区)来从时区调整为UTC。我们可以通过 ZoneOffset.UTC常量指定UTC(零偏移量)。

OffsetDateTime odt = zdt.toOffsetDateTime().withOffsetSameInstant( ZoneOffset.UTC );



  odt.toString():2019-06-24T23:00Z


请注意,突尼斯25日00:00在世界标准时间24日“昨天”晚上11点。时间轴上的相同时刻,相同同时点,但是两个不同的时钟时间。

最后,我们需要使用“基本” ISO 8601格式的字符串。使用我们上面定义的相同格式器。

DateTimeFormatter fIso8601DateTimeBasic = DateTimeFormatter.ofPattern( "uuuuMMdd'T'HHmmssX" );
String output = odt.format( fIso8601DateTimeBasic );



  输出:20190624T230000Z


参见此 code run live at IdeOne.com

时区和UTC偏移之间有什么区别?偏移量仅是小时-分钟-秒的数量。仅此而已,只有一个数字(三个数字)。时区更多。时区是特定区域的人们过去,现在和将来对偏移量的更改的历史记录。例如,在北美大部分地区,偏移量每年更改两次,一次增加一个小时,然后减少一个小时( Daylight Saving Time (DST)的谬误)。

提示:日期时间处理出奇的棘手和湿滑。如果您正在使用日历和 iCalendar规范进行数据交换,建议您花一些时间研究行业领先的java.time类的概念和实践。



关于java.time

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

要了解更多信息,请参见 Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为 JSR 310

现在位于 Joda-Time中的 maintenance mode项目建议迁移到 java.time类。

您可以直接与数据库交换java.time对象。使用与 JDBC driver或更高版本兼容的 JDBC 4.2。不需要字符串,不需要 java.sql.*类。

在哪里获取java.time类?


Java SE 8Java SE 9Java SE 10Java SE 11和更高版本-具有捆绑实现的标准Java API的一部分。


Java 9添加了一些次要功能和修复。

Java SE 6Java SE 7


大多数java.time功能都被反向移植到 ThreeTen-Backport中的Java 6和7。

Android


更高版本的Android捆绑了java.time类的实现。
对于较早的Android(<26), ThreeTenABP项目改编为 ThreeTen-Backport(如上所述)。请参见 How to use ThreeTenABP…



ThreeTen-Extra项目使用其他类扩展了java.time。该项目是将来可能向java.time添加内容的试验场。您可能会在这里找到一些有用的类,例如 IntervalYearWeekYearQuartermore

关于java - 规则直到标签数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54872208/

25 4 0