在将给定字符串解析为时间戳时遇到问题。 毫秒被错误地解析或让我知道我是否遗漏了什么。
我从请求中得到一个字符串:
String selectedTimeStamp = request.getParameter("selectTime");
System.out.println("selectedTimeStamp: "+selectedTimeStamp);
然后我使用simpleDateFormat来解析和格式化字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
Date parsedDate = sdf.parse(selectedTimeStamp);
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
System.out.println("createdTime: " +timestamp);
我得到的输出是:
selectedTimeStamp: 2016-07-04 21:09:47.66
createdTime: 2016-07-04 21:09:47.066
不确定为什么毫秒从66转换为066?它应该是660 任何想法?
答案 0 :(得分:0)
让我们一步一步地分解
您的代码(有效)
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
我假设这些是您所做的进口:
selectedTimeStamp
其输出为
parsedDate:Mon Jul 04 21:09:47 IST 2016
createdTime:2016-07-04 21:09:47.006
所以即使我作为参数传递了6 ms,它也被解析为600 ms,这很可能是因为我们正在使用java库来解析日期和sql库以便为它加时间戳。处理日期对象的过程在两种语言中都是不同的,因此不一致。此外,毫秒数被处理为1000次精度(1000ms = 1s),因此SQL自动将存储的Java转换为006(或者在您的情况下为66到066)。
我简单的解决方法这个问题是使用selectedTimeStamp.length() - selectedTimeStamp.lastIndexOf('.')
检查int x = selectedTimeStamp.length() - selectedTimeStamp.lastIndexOf('.');
if (x==2)
selectedTimeStamp += "00";
if (x==3)
selectedTimeStamp += '0';
并连接剩余的零,即如果是2然后是2个零,如果是3然后是1,如果是4那么没有零
这会给你正确的结果。
在String selectesTimeStamp =" 2016-07-04 21:09:47.6"之后添加此项线
$( '.header__menu_icon' ).click(function() {
var allClasses = 'right_0 right_280 right_minus_280';
$( '.mobile_menu, .wrap' ).removeClass( allClasses );
if ( $('.wrap' ).css( 'right' ) == '0px' ) {
$( '.wrap' ).addClass( 'right_280' );
}
else {
$( '.wrap' ).addClass( 'right_0' );
}
});
干杯!!!
P.S。:将SSS更改为SS将无效。