[英]java.util.Date get milliseconds
我做了以下事情:
String standardRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("hh:mm:ss");
Date range = rangeFormatter.parse(standardRange);
現在:
range.getTime();
..我的輸出為-3539000而不是61,000
我不確定我做錯了什么; 在調試時, cdate
存在,該屬性包含一個fraction
,其中包含值61,000,這就是我想要的。
你看到這個的原因是你創建的日期實際上是在日期時代的過去,而不是它之后的1m1s:
String standartRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("hh:mm:ss");
Date range = rangeFormatter.parse(standartRange);
System.out.println(new Date(0L));
System.out.println(new Date(0L).getTime());
System.out.println(range);
System.out.println(range.getTime());
及其產出;
Thu Jan 01 01:00:00 GMT 1970
0
Thu Jan 01 00:01:01 GMT 1970
-3539000
這里的紀元日期不正確 - 它應該是00:00:00,但由於BST / GMT更改日期和時區的歷史錯誤無法跟蹤。 似乎Sun / Oracle認為這是一個歷史性的“不准確”。
查看錯誤報告 - 它更全面地描述了問題。
根據您的語言(德語),這可能不是由於這個BST問題直接導致的,但它幾乎肯定是相關的。
Java Date不是為計算給定時間段的持續時間而設計的。 getTime()調用返回自1970年1月1日00:00:00 GMT以來的毫秒數。 在你的情況下,你實際上最終會得到一個在該紀元之前的日期(因此是負數)。 當我運行你的代碼時,我得到了21661000.(請參閱Sean Landsman的答案,因為我相信他已經找到了為什么會得到負面結果...提示:我的號碼正好是格林尼治標准時間的6小時或21600000毫秒)
Joda-Time是一個非常適合解決您的潛在問題的庫。
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
Period period = formatter.parsePeriod("00:01:01");
assert period.toStandardDuration().getMillis() == 61000
為了得到你想要的東西,你應該比較你想要的時間和時間的來源。 使用以下代碼:
String standardRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("HH:mm:ss");
Date range = rangeFormatter.parse(standardRange);
Date range2 = rangeFormatter.parse("00:00:00");
System.out.println(range.getTime() - range2.getTime());
根據JavaDoc, getTime()
:
返回自此Date對象表示的1970年1月1日00:00:00 GMT以來的毫秒數。
您想要一分鍾和一秒鍾內的毫秒數。
(60*minutes+seconds)*1000
它實際上不需要來自Date
對象。
如果您需要計算某個時間間隔的時間(以毫秒為單位),可以使用joda時間庫,或者從日期對象中獲取日,小時,分鍾,秒和毫秒組件並手動計算值。
嘗試:
Date range1 = rangeFormatter.parse("00:01:01");
Date range2 = rangeFormatter.parse("00:00:00");
System.out.println(range1.getTime() - range2.getTime());
hh:mm:ss
代表12小時的時間,它總是代表“時間點”,而不是“時間間隔”。 所以,時區肯定會影響價值。 但是,在GMT +0中,該值等於表示“時間間隔”。
你只需要:
rangeFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
試試吧!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.