2014-03-27 15 views

回答

6

基本上,以計算.beats當前時間的計算公式爲:

節拍=(UTC +1秒+(UTC +1分鐘* 60)+(UTC +1小時* 3600))/ 86, 4

將其舍入下來,您將當前時間放在.beats中。

新的Java代碼(java.time)

在Java 8和更高版本中,我們有新的java.time package(由JSR 310定義,通過Joda-TimeTutorial啓發,通過ThreeTen Extra項目擴展)。

public static int getCurrentTimeInBeats() { 
    ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC+01:00")); // "Biel Meantime" = UTC+01:00 
    int beats = (int) ((now.get(ChronoField.SECOND_OF_MINUTE) + (now.get(ChronoField.MINUTE_OF_HOUR) * 60) + (now.get(ChronoField.HOUR_OF_DAY) * 3600))/86.4); 
    return beats; 
} 

舊式Java代碼

如果你不能在Java中8使用新java.time包以後,你可以先用與早期版本的Java綁定的日期,時間類。

public static int getCurrentTimeInBeats() { 
    java.util.Calendar cal = java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone("GMT+01:00")); 
    int beats = (int) ((cal.get(java.util.Calendar.SECOND) + (cal.get(java.util.Calendar.MINUTE) * 60) + (cal.get(java.util.Calendar.HOUR_OF_DAY) * 3600))/86.4); 
    return beats; 
} 

注意,在GMT+01:00使用 「GMT」,而不是 「UTC」,按照文檔的TimeZone.getTimeZone

+0

嗯,根據我的研究,是不是斯沃琪時間UTC + 1? –

+0

@Duncan Yup,額外的小時在這裏手動添加。 '(cal.get(java.util.Calendar.HOUR_OF_DAY)+ 1)'。 –

+2

對不起,您的代碼已損壞。我在UTC時區,所以如果我在23:59:59調用你的函數,結果將是1041,而它應該是41.你應該改變時區爲UTC + 1,並且移除'+ 1 '你在最後的評論中提到。 –