2013-02-14 5 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 –

+0

Существует уже 'date' класс в Java (и' DateFormat' делать то, что вам нужно). Я предлагаю не изобретать колесо или, по крайней мере, не использовать одно и то же имя. – madth3

ответ

0

Use`String.split («/»)

Он возвращает массив строк для каждого маркера, а затем вам просто нужно разобрать каждый в целое и создать дату object.`

You возможно, захочет также изучить класс DateFormat. Он может разбирать строку для вас.

EDIT:

Статический заводский метод вместо этого.

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]); это (m, d, y); ' – Jon

+0

Если возможно, я бы предложил вместо этого использовать статический заводский метод. – npearson

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

может быть, вы можете использовать методы класса строки, чтобы получить свои подстроки, или использовать какой-то строки Tokenizer (я не знаю 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; 
     } 
    } 
} 
Смежные вопросы