[英]Converting string date to string in yyyy-MM-dd'T'HH:mm:ss.SSSSSS format in java 7
[英]converting a calendar object into a string in java with format “yyyy-mm-dd hh:mm:ss”
我正在將一個日歷對象中存儲的日期轉換為MySQL中的查詢。 我需要格式為“yyyy-MM-dd HH:mm:ss”的字符串,即:“2010-01-01 15:30:00”。 我正在使用如下代碼:
Calendar TimeStop = Calendar.getInstance();
TimeStop.set(2010, 01, 01, 15, 30, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String TimeStop_Str = sdf.format(TimeStop.getTime());
現在,該字符串的,而不是“2010 - 01 -01 15:30:00”像我所期望的是“2010 - 02 -01 15:30:00”。 我已經在http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html上檢查了解析器公式中可能存在的錯誤(例如,月份或資本HH的資本MM)幾個小時)但它沒有奏效。
我想我應該設置一些其他領域,或者可能還有另一種方法......任何想法?
Calendar.JANUARY
實際上是0
,而不是1
。
當您為set
的月份字段提供01
,您實際上將月份設置為2月,這就是當SimpleDateFormat
將其呈現為MM
時獲得02
原因。
當您使用任何Calendar.get/set
方法時,您必須采取額外的預防措施,以確保您了解“自然的”基於1的索引與更“笨拙”的基於0的Calendar
之間的差異索引。 每當你獲得/設置一個Calendar
的月份時,總有這種可能導致嚴重的錯誤。
這只是Calendar
中那些非常笨拙的設計之一,還有很多不足之處。 其中一個更好,更愉快的日期/時間API庫是Joda Time ,所以如果可能的話,你可以考慮轉換到那個庫。
Calendar.MONTH
- “為現場數get
和set
。指示一個月這是一個特定於日歷的值一年的第一個月[...]是JANUARY
是0”。 Calendar.set(…, int month, …)
- “ month
- 用於設置MONTH
日歷字段的值。月值為0,例如,0表示1月。” 另外,請注意01
實際上是八進制文字(即基數為8 )。 你不應該養成將0
添加到整數文字( §3.10.1 )的習慣,因為它們會導致細微的錯誤/錯誤,除非你非常小心。
例如, int i = 09;
是一種非法的Java代碼。
System.out.println(010); // prints 8, not 10
這只是幾個月從0
開始(不是1
)
也就是說,您不應該轉換為字符串以便在數據庫中插入日期。 您可以將時間戳或java.sql.Date
與PreparedStatement
一起使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.