[英]Is it possible to get time difference from directly Calendar fields?
如果標題令人困惑,對不起。 讓我清楚地解釋一下。 我需要玩幾天,幾個月和幾年。 為此,我使用日歷。 這是我的代碼;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int dayStart=0,monthStart=0,yearStart=0,dayFinish=0,monthFinish=0,yearFinish=0;
Calendar cal = (Calendar) Calendar.getInstance();
cal.set(Calendar.MONTH,Calendar.MAY); //SET MONTH AS MAY
cal.set(Calendar.DATE,1);
cal.set(Calendar.YEAR,2018);
monthStart=(cal.getCalendar.MONTH)+1);
dayStart=cal.get(Calendar.DATE);
yearStart=cal.get(Calendar.YEAR);
System.out.println("STARTING DAY: "+dayStart+" STARTING MONTH: "+monthStart+" STARTING YEAR: "+yearStart);
cal.add(Calendar.MONTH,6); //ADD 6 MONTHS
monthFinish = (cal.get(Calendar.MONTH)+1);
dayFinish = (cal.get(Calendar.DATE));
yearFinish = (cal.get(Calendar.YEAR));
System.out.println("FINISHING DAY: "+dayFinish+" FINISHNG MONTH: "+monthFinish+" FINISHING YEAR: "+yearFinish);
//WHAT I WANT IS printing out the days between 2 dates: 184
}
首先,我設置時間:1 5 2018,然后我添加6個月,時間變成1 112018。我需要將日差設為184(如果我將月份設置為1月,則應該為181)是否可以做它只是將相應的日歷字段(日期,月,年)轉換為秒或毫秒,然后從(1 11 2018)中減去(1 5 2018)的毫秒值,然后將毫秒轉換回天? 有類似的問題,但我無法完全按照自己的方式找到解決方案。
LocalDate start = LocalDate.of(2018, Month.MAY, 1);
LocalDate finish = start.plusMonths(6);
long daysBetween = ChronoUnit.DAYS.between(start, finish);
System.out.format("Days between %s and %s: %d%n", start, finish, daysBetween);
恕我直言,這很清楚,很簡短。 和獎金,它可以正常工作。 輸出為:
2018-05-01至2018-11-01之間的天數:184
Calendar
類存在設計問題,現在已經過時了。 因此,我建議改為使用現代Java日期和時間API java.time。 有一種方法有一個Calendar
算錯日子,但它更復雜,比你所期望的,而且沒有理由你應該不想打擾。 從毫秒計算天數(這在Stack Overflow的幾個答案中顯示,不僅是這個問題的其他答案)有時會給出正確的結果,有時卻不能。 這兩個問題是:(1)由於夏季時間(DST)和其他間斷性,一天可能是23、24或25小時,或者介於此間隔之間甚至超出此間隔的某個數字。 如果間隔中的一天少於24小時,那么從毫秒轉換將導致1天太少。 (2) Calendar
(盡管有名稱)也保存一天中的時間。 在您的代碼中,它將在添加6個月前后的一天中的同一時間舉行。 在其他情況下,一天中不同的時間可能會導致您得到1天的時間太少,或者在極少數情況下會導致1天的時間太多。
是的, java.time
在Android設備上運行良好。 它至少需要Java 6 。
org.threeten.bp
和子包中導入日期和時間類。 java.time
。 您可以嘗試類似的方法為您工作
import java.util.*;
import java.util.concurrent.TimeUnit;
public class Calendar1 {
public static void main(String args[])
{
Calendar startDate = Calendar.getInstance();
//Setting year, month and day
startDate.set(2018, 5, 1);
Calendar endDate = Calendar.getInstance();
endDate.set(2018, 11, 1);
long end = endDate.getTimeInMillis();
long start = startDate.getTimeInMillis();
System.out.println("Time difference in days " + TimeUnit.MILLISECONDS.toDays(Math.abs(end - start)));
}
}
您可以執行此操作。 更改年份,月份和日期並在日歷中進行設置。 使用java.time.temporal.ChronoUnit獲得差異。 示例代碼如下。
公共無效daysBetween(){
Calendar startOfMonth = Calendar.getInstance();
startOfMonth.set(Calendar.YEAR, 2018);
startOfMonth.set(Calendar.MONTH, 10);
startOfMonth.set(Calendar.DAY_OF_MONTH, 1);
Calendar endOfMonth = Calendar.getInstance();
endOfMonth.set(Calendar.YEAR, 2018);
endOfMonth.set(Calendar.MONTH, 10);
endOfMonth.set(Calendar.DAY_OF_MONTH, 30);
System.out.println(ChronoUnit.DAYS.between(startOfMonth.toInstant(),endOfMonth.toInstant()));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.