2013-02-14 70 views
0

我需要將表示日期的字符串轉換爲日期。將字符串轉換爲表示日期的整數

一個日期被構造是這樣的:

private int m; 
private int d; 
private int y; 

public Date(int month, int day, int year) { 
     if (isValidDate(month, day, year)) { 
      m = month; 
      d = day; 
      y = year; 
     } else { 
      System.out.println("Error: not a valid date"); 
      System.exit(0); 
     } 
    } 

需要被轉換成此日期對象的字符串的格式爲:

"month/day/year" 

月是1或2個字符,則日期是1或2個字符,年份可以是1 - 4個字符。

我的想法是通過字符串循環,找到字符/出現的時間,但我覺得有更好的方法去實現它。

完成此操作的最佳方法是什麼?

+0

https://www.google.com/search?q=date+format+java – 2013-02-14 00:43:49

+0

已經有一個'在Java中Date'類(和'DateFormat'做你的需要)。我建議不要重新發明輪子,或者至少不要使用相同的名稱。 – madth3 2013-02-14 00:57:33

回答

0

Use`String.split(「/」)

它返回每個令牌的字符串數組,然後你只需要解析每一個成整數,並創建object.`

您的日期也可能要查看DateFormat類。它可能能夠爲你解析字符串。

編輯:

改爲靜態工廠方法。

public static Date asDate(String s) { 
    String[] dateStrings = s.split("/"); 
    int m = Integer.parseInt(dateStrings[0]); 
    int d = Integer.parseInt(dateStrings[1]); 
    int y = Integer.parseInt(dateStrings[2]); 
    return new Date(m, d, y); 
} 
+0

我的問題措辭錯誤:我需要製作另一個將日期作爲字符串的構造函數。我試過這個,但它給了我一個錯誤:「構造函數調用必須是構造函數中的第一條語句。」這是我的: 'public Date(String s){ String [] dateStrings = s.split(「/」); m = Integer.parseInt(dateStrings [0]); d = Integer.parseInt(dateStrings [1]); y = Integer.parseInt(dateStrings [2]); this(m,d,y);' – Jon 2013-02-14 03:21:08

+0

如果可能,我會建議使用靜態工廠方法。 – npearson 2013-02-14 06:06:00

1

你能做到像這樣:

String date = "14/02/2013"; 
String [] splitDate = date.split("/"); 
Date date = new Date(Integer.parseInt(splitDate[0]), 
        Integer.parseInt(splitDate[1]), 
        Integer.parseInt(splitDate[2])); 
-1

也許你可以使用String類的方法來獲取你的子,或者使用某種字符串標記的(我不知道Java的好,所以不能幫你確切的名字)。 但「引擎蓋下」這些函數也必須遍歷字符串,沒有辦法繞過它。 所以你的想法很好,我認爲。這只是一個問題,你想掌握在Java內置的可能性,或者你只是想快速得到它:)

0

也許這個代碼可以幫助你。

public class TestDate { 

    private int m; 
    private int d; 
    private int y; 

    public static void main(String[] args) { 
     String date = "02/14/2013"; 
     String[] splitDate = date.split("/"); 
     TestDate td = new TestDate(); 
     td.Date(Integer.parseInt(splitDate[0]), 
       Integer.parseInt(splitDate[1]), 
       Integer.parseInt(splitDate[2])); 
     System.out.println(td.m +"/"+td.d+ "/"+td.y); 
    } 

    public void Date(int month, int day, int year) { 
     if (isValidDate(month, day, year)) { 
      m = month; 
      d = day; 
      y = year; 
     } else { 
      System.out.println("Error: not a valid date"); 
      System.exit(0); 
     } 
    } 

    private static boolean isValidDate(int month, int day, int year) { 
     String stDate = month + "/" + day + "/" + year; 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
     sdf.setLenient(false); 
     try { 
      sdf.parse(stDate); 
      return true; 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 
}