簡體   English   中英

將日歷對象轉換為java格式的字符串,格式為“yyyy-mm-dd hh:mm:ss”

[英]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 ,所以如果可能的話,你可以考慮轉換到那個庫。

API鏈接

  • Calendar.MONTH - “為現場數getset 。指示一個月這是一個特定於日歷的值一年的第一個月[...]是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.DatePreparedStatement一起使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM