2010-03-29 51 views
2

我正在寫一段Java代碼,需要花費一段時間從bash腳本發送並將時間解析爲毫秒。當我檢查日期的毫秒轉換時,除了我發送的月份是一月份而非三月份以外,一切都正確。如何在Java程序中將日期從bash腳本轉換爲毫秒?

這裏是我的bash腳本,後來在腳本中,我傳遞給Java程序創建變量:

TIME=`date +%m%d%Y_%H:%M:%S` 

這裏是Java代碼解析的時間毫秒:

String dt = "${scriptstart}"; 
java.text.SimpleDateFormat scriptStart = new java.text.SimpleDateFormat("MMDDyyyy_HH:mm:ss"); 
long start = scriptStart.parse(dt).getTime(); 

此聲明的目標是查找腳本啓動和當前系統時間之間的經過時間。

要解決這個我打印出來兩個:

System Time = 1269898069496 (converted = Mon Mar 29 2010 16:27:49 GMT-0500 (Central Daylight Time)) 
Script Start = 03292010_16:27:45 
Script Start in Milli = 1264804065000 (Converted = Fri Jan 29 2010 16:27:45 GMT-0600 (Central Standard Time)) 
+1

你能給它發送'date +%s'的輸出嗎? – mob 2010-03-29 21:55:31

+0

有趣;有人低估了這個問題和所有的答案。 – 2010-03-30 14:58:20

回答

1

按照Epoch Converter網站都以毫秒爲單位的時間戳打印表示正確的時間。您的字符串格式化程序中的DD應該是dd

0

根據Javadocs,您應該使用「MMddyyyy」而不是「MMDDyyyy」。 「DD」是年的當天,而不是月的當天

這顯然會導致它覆蓋已經解析的月份,而這又會導致輸出爲1月29日 - 一年的第29天。

+0

嗯,有人upvoted,然後把它拿回來。我錯了嗎? – 2010-03-29 22:03:00

1

您需要使用「dd」而不是「DD」。您正在使用「每日一次」而不是「每月一天」。

所以改變這樣的:new java.text.SimpleDateFormat("MMDDyyyy_HH:mm:ss")

這樣:new java.text.SimpleDateFormat("MMddyyyy_HH:mm:ss")

0

date命令(這是獨立猛砸,順便)將打印在自紀元秒的時間,而不必使用其轉換Java:

scriptstart=$(date +%s) 
echo ${scriptstart}  # example: 1269903559