2012-06-05 21 views
2

我希望將我的日期格式更改爲MM/DD/YYYY,當前爲YYYY/MM/DD。更改YYYY/MM/DD - > MM/DD/YYYY java

我試着研究它,但對我的諷刺來說,它始終是相反的。現在有人可能會說嘗試向後嘗試從那裏開始工作,但它不起作用。

我調用所有的事情類:

import java.util.*; 
import java.text.*; 

class Driver { 
    public static void main (String[] args) {  
     Kid kid; 
     Node list = new Node(); 

     kid = createKid("Lexie", 2.6, "11/5/2009"); 
     insertEnd(list, kid); 
     kid = createKid ("Sally", 2.3, "4/8/2009"); 
     insertEnd(list, kid); 
     kid = createKid ("Joe", 2.7, "6/16/2009"); 
     insertEnd(list, kid); 
     kid = createKid ("Bob", 2.2, "1/16/2009"); 
     insertEnd(list, kid); 
     kid = createKid ("Tom", 3.1, "8/16/2009"); 
     insertEnd(list, kid); 
     printList(list); 
    } //end main method 

    public static Kid createKid(String name, double height, String date) { 
     return new Kid(name, height, date); 
    } 

} //end class  


import java.util.*; 
import java.text.SimpleDateFormat; 
import java.io.*; 
class Kid { 
    String name; 
    double height; 
    GregorianCalendar bDay; 

    ... 
    /** 
    * Second constructor for kid 
    * Setting instances to equal the constructors of this 
    * @param 1: Setting n (aka name, but it was taken) to equal the instance var of name 
    * @param 2: Setting h (aka height, but it was taken) to equal the instance var of height 
    * @param 3: Setting date to equal the instance var of bDay with some modifications 
    */ 
    public Kid (String n, double h, String date) { 
     StringTokenizer st = new StringTokenizer(date, "/"); 
     this.name = n; 
     this.height = h; 
     this.bDay = new GregorianCalendar(Integer.parseInt(st.nextToken()), 
     Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); 
    } 

    /** 
    * public String toString() { 
    * Converting Java language to English language 
    */ 
    public String toString() { 

     return (this.name + ", Height: " + this.height + "ft., Born: " 
     +  this.bDay.get(Calendar.DATE) + "/" + this.bDay.get(Calendar.MONTH) 
     + "/" + this.bDay.get(Calendar.YEAR)); 

    } 
} //end class 

順便說一句,簡單日期格式類和日期格式類,我不熟悉,並有過無法實現它們。

+5

對於SO問題,這是太多的代碼。你應該努力構建一個更簡單的測試用例(http://sscce.org)來證明問題。 –

+1

不要使用'String'作爲'Date',如果您需要'Date'需要'Date'... –

+0

好的,將編輯爲我需要集中的幫助。 編輯:現在更新。 – user1283885

回答

7

只需使用SimpleDateFormat即可將String轉換爲Date。沒有必要與痛苦的Calendar API麻煩。

String dateString = "2012/06/05"; 
Date date = new SimpleDateFormat("yyyy/MM/dd").parse(dateString); 

使用整個代碼此Date對象,而不是。當你需要出示Date對象人類,只是用另一種SimpleDateFormat

String dateString = new SimpleDateFormat("MM/dd/yyyy").format(date); 
0

TL;博士

String output = LocalDate.parse("2012/06/05".replace("/" , "-")).format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.US)) ; 

詳細

Answer by BalusC是正確的,但現在已經過時。

舊的日期時間類,如DateCalendar現在是遺留的。改爲使用java.time類。

ISO 8601

你輸入的字符串與ISO 8601標準幾乎兼容。只需用連字符替換斜線字符即可。 java.time類默認分析/生成ISO 8601格式的字符串,無需定義格式化模式。

String input = "2012/06/05".replace("/" , "-"); 

LocalDate

LocalDate類表示沒有時間一天和不同時區的日期,唯一的價值。

LocalDate ld = LocalDate.parse(input); 

ISO 8601格式生成輸出,只需調用toString

String output = ld.toString(); 

要生成其他格式的字符串,請使用DateTimeFormatter。通常最好通過指定Locale來讓該類自動爲您定位。 Locale確定(a)翻譯的人類語言,(b)大寫,標點,部分排序等問題的文化規範。

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT) ; 
f = f.withLocale(Locale.US); // Or Locale.CANADA_FRENCH etc. 
String output = ld.format(f); 

關於java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java.time功能後移植到Java 6 和ThreeTenABP還適於Android

ThreeTen-Extra項目擴展java.time與其他類。這個項目是未來可能增加java.time的一個試驗場。你可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuarter,等等。