我正在用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))
答案 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