第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何轉(zhuǎn)換兩個 Calendar 對象之間的確切時間量(年、月、日、小時、分鐘、秒)?

我如何轉(zhuǎn)換兩個 Calendar 對象之間的確切時間量(年、月、日、小時、分鐘、秒)?

蠱毒傳說 2023-06-14 14:39:03
我試圖隱藏 Java 中兩個 Calendar 對象之間的確切時間量。這是我目前擁有的代碼......public static Map<TimeUnit, Long> computeDifference(Calendar date1, Calendar date2) {     long diffInMillies = date2.getTimeInMillis() - date1.getTimeInMillis();    //create the list    List<TimeUnit> units = new ArrayList<TimeUnit>();    units.add(TimeUnit.SECONDS);    units.add(TimeUnit.MINUTES);    units.add(TimeUnit.HOURS);    units.add(TimeUnit.DAYS);    Collections.reverse(units);    //create the result map of TimeUnit and difference    Map<TimeUnit,Long> result = new LinkedHashMap<TimeUnit,Long>();    long milliesRest = diffInMillies;    for ( TimeUnit unit : units ) {        //calculate difference in millisecond         long diff = unit.convert(milliesRest,TimeUnit.MILLISECONDS);        long diffInMilliesForUnit = unit.toMillis(diff);        milliesRest = milliesRest - diffInMilliesForUnit;        //put the result in the map        result.put(unit,diff);    }    return result;}   打印時,輸出看起來像這樣{DAYS=1, HOURS=10, MINUTES=30, SECONDS=45}輸入date1 = 19 August 2019 02:00:00和date2 = 20 August 2019 12:30:45此方法中可用的最大時間單位是DAYS,但我想找到同時包含月份和年份的內(nèi)容。我意識到 TimeUnit 與特定的日歷日期(而不是 24 小時間隔)沒有任何關(guān)系,這就是為什么我想知道是否有任何方法可以使用 Calendar 類或類似的東西進(jìn)行這種轉(zhuǎn)換。我還研究了 ChronoUnit 作為 TimeUnit 的替代品,但由于 TimeUnit 不起作用的相同原因,它不起作用。會喜歡關(guān)于如何合并更大的時間單位的任何建議。謝謝你!
查看完整描述

2 回答

?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個贊

你不應(yīng)該使用這個Calendar類,因?yàn)樗呀?jīng)過時了。您應(yīng)該改用java.time包中的類。

為了獲得所需的結(jié)果,您可以使用該類Period

您首先需要將兩個Calendar實(shí)例都轉(zhuǎn)換為LocalDateinstances。

然后您可以使用Period.between(startDate, endDate)to 獲取一個Period實(shí)例,這使得getDays()getMonths()方法getYears()對您可用。


如果您還想包括時間組件(小時、分鐘和秒),那么您可以Duration結(jié)合使用Period.?

這樣的事情可能會起作用:

LocalDateTime start = LocalDateTime.of(2019, 1, 1, 12, 0, 0);

LocalDateTime end = LocalDateTime.of(2021, 4, 26, 5, 56, 40);


Duration d = Duration.between(start.toLocalTime(), end.toLocalTime());

Period p = Period.between(start.toLocalDate(), end.toLocalDate());


// If the startdate's time component lies behind the enddate's time component,

// then we need to correct both the Period and Duration

if (d.isNegative()) {

? ? p = p.minusDays(1);

? ? d = d.plusDays(1);

}


System.out.printf("y %s m %s d %s h %s m %s s %s%n",

? ? p.getYears(),

? ? p.getMonths(),

? ? p.getDays(),

? ? d.toHours() % 24,

? ? d.toMinutes() % 60,

? ? d.getSeconds() % 60);

請注意,Java 9 附帶to…Part方法,因此您不必再使用模運(yùn)算符。


請注意:由于夏令時,此代碼未考慮時鐘調(diào)整。


查看完整回答
反對 回復(fù) 2023-06-14
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個贊

Period

.between(

? ? ( ( GregorianCalendar ) myCalStart ).toZonedDateTime().toLocalDate() ,

? ? ( ( GregorianCalendar ) myCalStop ).toZonedDateTime().toLocalDate()?

)

…或者…


Duration

.between(

? ? ( ( GregorianCalendar ) myCalStart ).toInstant() ,

? ? ( ( GregorianCalendar ) myCalStop ).toInstant()?

)

java.time

您正在使用多年前被 JSR 310 中定義的現(xiàn)代java.time類所取代的可怕的日期時間類。

切勿使用Calendar,?GregorianCalendar,?Date,SimpleDateFormat等。僅使用在java.time包中找到的類。

ZonedDateTime

假設(shè)您的兩個Calendar對象實(shí)際上都是GregorianCalendar下面的對象,請轉(zhuǎn)換。要進(jìn)行轉(zhuǎn)換,請調(diào)用添加到舊類的新to…/方法。from…


// start

GregorianCalendar gcStart = ( GregorianCalendar ) myCalStart ;

ZonedDateTime zdtStart = gcStart.toZonedDateTime() ;


// stop

GregorianCalendar gcStop = ( GregorianCalendar ) myCalStop ;

ZonedDateTime zdtStop = gcStop.toZonedDateTime() ;

和 都GregorianCalendar代表ZonedDateTime一個日期和一個時區(qū)上下文中的時間,結(jié)合起來確定一個時刻(時間軸上的特定點(diǎn))。ZonedDateTime解析到更精細(xì)的納秒級而不是毫秒級。

Period

如果您關(guān)心以年-月-日為單位的經(jīng)過時間,請使用Period對象LocalDate。LocalDate表示沒有時間和時區(qū)的日期。我們可以從我們的對象中提取日期部分ZonedDateTime

LocalDate ldStart = zdtStart.toLocalDate() ;

LocalDate ldStop = zdtStop.toLocalDate() ;

Period p = Period.between( ldStart , ldStop ) ;

生成標(biāo)準(zhǔn)ISO 8601格式的字符串。


String output = p.toString() ;

詢問數(shù)年、數(shù)月、數(shù)日。


int years = p.getYears() ;

int months = p.getMonths() ;

int days = p.getDays() ;

Duration

如果您以小時-分鐘-秒的形式計(jì)算經(jīng)過的時間,請使用Duration.?此類代表 UTC 中的一對時刻。因此,我們Instant從我們的ZonedDateTime對象對中提取對象,這些對象在內(nèi)部保留自 UTC 1970 年第一時刻的紀(jì)元參考以來的整秒計(jì)數(shù),加上小數(shù)秒作為納秒計(jì)數(shù)。

Instant instantStart = zdtStart.toInstant() ;

Instant instantStop = zdtStop.toInstant() ;

Duration d = Duration.between( instantStart , instantStop ) ;

生成標(biāo)準(zhǔn)ISO 8601格式的字符串。


String output = d.toString() ;

查詢天數(shù)(與日歷無關(guān)的 24 小時時間塊)、小時、分鐘、秒。


long days = d.toDaysPart() ;

int hours = d.toHoursPart() ;

int minutes = d.toMinutesPart() ;

int seconds = d.toSecondsPart() ;

int nanos = d.toNanosPart() ;

PeriodDuration

如果您考慮一下,您會發(fā)現(xiàn)將年/月/日與 24 小時-日/小時/分鐘/秒結(jié)合起來是沒有意義的。

http://img2.sycdn.imooc.com/648960ef00014a8606520413.jpg

查看完整回答
反對 回復(fù) 2023-06-14
  • 2 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號