gpt4 book ai didi

java - 将 java.time 类从 java 8 转换为 java 5

转载 作者:行者123 更新时间:2023-11-30 02:26:20 26 4
gpt4 key购买 nike

如何在 Java 5 中使用这行代码,因为此代码使用 Threetenbp 在 Java 6 和 7 上运行,并直接在 Java 8 上运行:

// start date (set the time to start of day)
ZonedDateTime from = LocalDate.parse("2017-07-05").atStartOfDay(ZoneOffset.UTC);
// end date (set the time to 11 PM)
ZonedDateTime to = LocalDate.parse("2017-07-08").atTime(23, 0).atZone(ZoneOffset.UTC);

// get start and end timestamps
long start = from.toInstant().truncatedTo(ChronoUnit.MINUTES).toEpochMilli() / 1000;
long end = to.toInstant().truncatedTo(ChronoUnit.MINUTES).toEpochMilli() / 1000;

最佳答案

ThreeTen Backport似乎只在 Java 6 和 7 中工作。我已经使用 JDK 5 进行了测试,它抛出 UnsupportedClassVersionError .

在 Java 5 中,一种替代方案是旧的 SimpleDateFormatCalendar类(class):

// set the formatter to UTC
TimeZone utc = TimeZone.getTimeZone("UTC");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setTimeZone(utc);

// parse and set the time to midnight
Calendar cFrom = Calendar.getInstance(utc);
cFrom.setTime(sdf.parse("2017-07-05"));
cFrom.set(Calendar.HOUR_OF_DAY, 0);
cFrom.set(Calendar.MINUTE, 0);
cFrom.set(Calendar.SECOND, 0);
cFrom.set(Calendar.MILLISECOND, 0);

// parse and set the time to 23:00
Calendar cTo = Calendar.getInstance(utc);
cTo.setTime(sdf.parse("2017-07-08"));
cTo.set(Calendar.HOUR_OF_DAY, 23);
cTo.set(Calendar.MINUTE, 0);
cTo.set(Calendar.SECOND, 0);
cTo.set(Calendar.MILLISECOND, 0);

// get the epoch second (get millis and divide by 1000)
long start = cFrom.getTimeInMillis() / 1000;
long end = cTo.getTimeInMillis() / 1000;
<小时/>

另一种选择是使用 Joda-Time ,它的 API 与 java.time 非常相似:

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

DateTime from = LocalDate.parse("2017-07-05").toDateTimeAtStartOfDay(DateTimeZone.UTC);
DateTime to = LocalDate.parse("2017-07-08").toDateTime(new LocalTime(23, 0), DateTimeZone.UTC);

long start = from.getMillis() / 1000;
long end = to.getMillis() / 1000;

这将为 start 生成相同的值和end .

<小时/>

请注意:Joda-Time 处于维护模式,并且正在被新的 API 取代,因此我不建议使用它启动一个新项目(当然,除非您不能使用新的 API)。
即使在 joda's website它说:“请注意,Joda-Time 被认为是一个很大程度上“完成”的项目。没有计划进行重大增强。如果使用 Java SE 8,请迁移到 java.time (JSR-310)。” .

关于java - 将 java.time 类从 java 8 转换为 java 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575957/

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