如何将从bash脚本获取的日期转换为Java程序中的毫秒数?

时间:2010-03-29 21:49:47

标签: java bash datetime

我正在用Java编写一段代码,需要花时间从bash脚本发送并将时间解析为毫秒。当我检查日期的毫秒转换时,一切都是正确的,除了我发送的月份是1月而不是3月。

这是我在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))

4 个答案:

答案 0 :(得分:1)

根据Epoch Converter网站,这些时间戳以毫秒为单位打印正确表示的时间。 <{1}}应该是字符串格式化程序中的DD

答案 1 :(得分:1)

您需要使用“dd”而不是“DD”。您使用的是“一年中的一天”而不是“每月的一天”。

所以改变一下:new java.text.SimpleDateFormat("MMDDyyyy_HH:mm:ss")

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

答案 2 :(得分:0)

根据Javadocs,您应该使用“MMddyyyy”而不是“MMDDyyyy”。 “DD”是的日期,而不是月的日期

这显然会导致它覆盖已经解析的月份,这反过来导致输出为1月29日 - 一年中的第29天。

答案 3 :(得分:0)

日期命令(顺便说一下,它独立于Bash)将打印自Epoch以来的秒数,而不必使用Java转换它:

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