[英]Java date is not preserving milliseconds in conversion with simple date format
我正在嘗試將以下字符串"2012-04-13 04:08:42.794"
轉換為日期類型:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date convertedDate;
try {
convertedDate = dateFormat.parse(dateString);
System.out.println(" in utils: "+convertedDate.toString());
} catch (ParseException e) {
e.printStackTrace();
return null;
}
//----------------- i think this is the problem
java.sql.Date sqlDate = new java.sql.Date(convertedDate.getTime());
System.out.println("sql: "+sqlDate.toString());
return sqlDate;
但這是打印以下內容:
in utils: Fri Apr 13 04:08:42 PDT 2012
我怎樣才能得到這個日期以保持毫秒?
convertedDate對象確實包含毫秒信息。 這里的問題是toString()方法格式不打印毫秒。
做
System.out.println(" in utils: " + dateFormat.format(convertedDate));
您還可以檢查是否設置了ms
System.out.println("millis: " + convertedDate.getTime());
Calendar now = Calendar.getInstance();
System.out.println("Current milliseconds since Jan 1, 1970 are :"
+ now.getTimeInMillis());
只需使用java.util.Calendar http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
他是我的(嘗試保持與你的代碼風格相同):
import java.util.*;
import java.text.*;
public class main {
public static void main(String[] args)throws Exception {
long yourmilliseconds = 1119193190;
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm:ss.SSS");
Date resultdate = new Date(yourmilliseconds);
System.out.println(sdf.format(resultdate)); }
}
輸出:
Jan 13,1970 17:53:13.190
此致,Erwald
您可以創建自己的打印方法,而不是使用toString()打印,因此它會打印您想要的信息。 另請注意,大多數Date類都已棄用 - 請查看http://docs.oracle.com/javase/6/docs/api/java/util/Date.html
myPreparedStatetment.setObject(
… ,
LocalDateTime.parse(
"2012-04-13 04:08:42.794".replace( " " , "T" )
)
)
SJuan76的回答是正確的:你被Date::toString
方法設計不佳的輸出所迷惑。 相反,使用java.time類。
現代方法使用java.time類來取代麻煩的舊日期時間類,例如Date
/ Calendar
。
首先將輸入字符串轉換為完全符合ISO 8601標准。 用T
替換中間的SPACE。
String input = "2012-04-13 04:08:42.794".replace( " " , "T" ) ;
解析為LocalDateTime
因為您的輸入缺少LocalDateTime
UTC或時區的偏移量。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
ldt.toString():2012-04-13T04:08:42.794
避免使用與日期時間相關的java.sql
類。 它們也被java.time類所取代。 從JDBC 4.2開始,您可以直接與數據庫交換java.time對象。 所以你可以忘記java.sql.Date
類及其糟糕的黑客設計。
myPreparedStatement.setObject( … , ldt ) ;
和…
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
故事的道德#1: 使用智能對象,而不是愚蠢的字符串。
故事的道德#2: 僅使用java.time對象。 避免遺留日期時間類。
java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
使用符合JDBC 4.2或更高版本的JDBC驅動程序 ,您可以直接與數據庫交換java.time對象。 不需要字符串也不需要java.sql。*類。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.