2013-02-14 52 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; 
     } 
    } 
}