[英]Android Java : Difference between current time and specific time in future is calculated wrong
我需要當前時間和未來特定時間之間的差異,以便我可以將倒數計時器作為參數傳遞。 我有此操作的 function 但它計算錯誤。 這是我的 function 計算差異
public Date RetriveLeftTime(Date incomingTime) {
DateFormat milisFormat = new SimpleDateFormat("HH:mm:ss");
Date moment = Calendar.getInstance().getTime();
milisFormat.format(moment);
Date configuredTime = ConfigureTime(incomingTime);
milisFormat.format(configuredTime);
long leftTime =configuredTime.getTime()-moment.getTime();
Date result = new Date(leftTime);
result = ConfigureTime(result);
Log.d("Result",result.toString());
return result;
}
用於配置日期詳細信息的 ConfigureTime() function
public Date ConfigureTime(Date date){
Calendar today = Calendar.getInstance();
int date = today.get(Calendar.DATE);
int year = today.get(Calendar.YEAR);
int day = today.get(Calendar.DAY_OF_WEEK);
int month = today.get(Calendar.MONTH);
int zone = today.get(Calendar.ZONE_OFFSET);
Calendar time = Calendar.getInstance();
time.setTime(date);
time.set(Calendar.YEAR, year);
time.set(Calendar.MONTH, month);
time.set(Calendar.DAY_OF_WEEK, day);
time.set(Calendar.DATE, date);
time.set(Calendar.ZONE_OFFSET,zone);
Log.d("ConfigureTime()",time.getTime().toString());
Log.d("Current Time",today.getTime().toString());
return time.getTime();
}
我看過關於這個問題的類似帖子。我檢查並配置了我所有的時間規范,如時區、日期、年份,但仍然得到錯誤的結果。我不明白為什么會發生。也許我的代碼做錯了我不這樣做不知道。 我做錯了什么? 大多數人建議使用 joda 時間,但我在切換 joda 時間方面做得太過分了。在切換到 joda 時間之前有解決方案嗎?
Duration
.between(
Instant.now() ,
myJavaUtilDate.toInstant()
)
.toMillis()
您正在使用幾年前被 JSR 310 中定義的現代java.time類取代的糟糕類。切勿使用Calendar
、 Date
、 SimpleDateFormat
。
Instant
如果您java.util.Date
object,請立即轉換為Instant
object。 使用添加到舊類的新轉換方法。
Instant then = myJavaUtilDate.toInstant() ;
Instant
表示“以 UTC 為單位”的時刻,偏移量為零時分秒。
捕捉以 UTC 顯示的當前時刻。
Instant now = Instant.now() ;
計算經過的時間。
Duration d = Duration.between( now , then ) ;
驗證您的目標時刻確實在未來。
if( d.isNegative() ) { … deal with faulty input … }
通常最好傳遞一個Duration
object 而不是僅僅計算毫秒或納秒的 integer。 但如果需要,您可以從Duration
object 中提取計數。
long milliseconds = d.toMillis() ;
請注意,通過使用 UTC,我們無需處理任何時區問題。
如果使用 Android 26+,則此功能是內置的。 對於早期的 Android,最新的工具通過“API 脫糖”帶來了大部分功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.