2017-05-05 25 views
0

今日は5月5日です。次のコードは4月11日と4月10日に出力されます。代わりに、私は4月11日と5月29日になります。ここでは、コードは次のようになります。日付の変換が正しくありません

int daysBack = 24; 
    long dayBeginningMilis = getTodaysBeginningMilis() - 86400000 * daysBack; 
    Log.i(TAG, "Date: " + new Date(dayBeginningMilis)); 

    daysBack = 25; 
    dayBeginningMilis = getTodaysBeginningMilis() - 86400000 * daysBack; 
    Log.i(TAG, "Date: " + new Date(dayBeginningMilis)); 

private long getTodaysBeginningMilis() { 

    // Get milis of todays beginning 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.HOUR, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 
    calendar.setTimeZone(TimeZone.getTimeZone("Europe/Kiev")); 

    return calendar.getTimeInMillis(); 

} 

出力:

Date: Tue Apr 11 00:00:00 EEST 2017 
Date: Mon May 29 17:02:47 EEST 2017 

ですが、なぜでしょうか?

答えて

1

犯人が見つかりました。整数を掛け合わせると範囲外になり、自動的にLongに変換されないようです。この変更により問題は解決しました:

long daysBack = 24L; 
long dayBeginningMilis = getTodaysBeginningMilis() - 86400000L * daysBack; 
Log.i(TAG, "Date: " + new Date(dayBeginningMilis)); 

daysBack = 25L; 
dayBeginningMilis = getTodaysBeginningMilis() - 86400000L * daysBack; 
Log.i(TAG, "Date: " + new Date(dayBeginningMilis)); 
関連する問題