2010-03-29 61 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