2013-05-01 1 views
0
private Date startDate; 


public void readData(Scanner scanner) 
    { 

     // String dates = DateUtil.convertDateToShortString(startDate); 
     dates = scanner.next(); 

    } 

에 의해 Date 형의 필드를 읽고, 나는 문자열로 필드를 변환하고 스캐너로 읽어 시도했지만 내가하지 않습니다 작업스캐너 나 스캐너에서 Date 형의 필드의 startDate를 읽을 수있는 방법

+0

* 입력 * 모양은 무엇입니까? 이 파일이 있다고 가정하면, 파일은 어떻게 생겼을까요? 잠재 된 표현은 다양합니다. –

+0

000005, TF-68670, AB-312172, Fri Jan 04 00:00:00 GMT 2013, 2 –

+1

그건 구문 분석하기에는 정말 못생긴 형식이다. (그래도 여전히 가능하다. 토큰 separator로서 사용해, SimpleDateFormat를 사용해 해석합니다. –

답변

1

개체에서 필드를 String으로 읽은 다음 SimpleDateFormat을 사용하여 문자열을 구문 분석 할 수 있습니다. 몇 가지주의 할

Scanned Date output

:

  • 나는 간단한 String 입력을 사용하여 Scanner 객체를 생성 한 출력은 BlueJ의 터미널 창에서 보이는 방법은 다음과

    import java.util.Date; 
    import java.util.Scanner; 
    import java.util.TimeZone; 
    import java.text.SimpleDateFormat; 
    import java.text.ParseException; 
    
    public class DataReader 
    { 
        private Date startDate; 
    
        // format to match Fri Jan 04 00:00:00 GMT 2013 
        private SimpleDateFormat inDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy"); 
        private SimpleDateFormat outDateFormat = new SimpleDateFormat("EEE yyyy-MMM-dd hh:mm:ss z"); 
    
        public DataReader() { 
         outDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
        } 
    
        public String formatStartDate() { 
         return outDateFormat.format(this.startDate); 
        } 
    
        public void readData(Scanner scanner) { 
         String token1 = scanner.next(); 
         String token2 = scanner.next(); 
         String token3 = scanner.next(); 
         String dateToken = scanner.next(); 
         String token5 = scanner.next(); 
    
         System.out.println("Scanned Date Token: " + dateToken); 
    
         try { 
          startDate = inDateFormat.parse(dateToken); 
         } 
         catch (ParseException ex) { 
          ex.printStackTrace(); 
         } 
        } 
    
        public static void main(String[] args) { 
         String data = "000005, TF-68670, AB-312172, Fri Jan 04 00:00:00 GMT 2013, 2"; 
         Scanner scanner = new Scanner(data); 
         scanner.useDelimiter(", "); 
    
         DataReader dr = new DataReader(); 
         dr.readData(scanner); 
    
         System.out.println("Start Date: " + dr.formatStartDate()); 
        } 
    } 
    

    입니다 main 메소드에서. 코드는 다른 소스에서 입력을 받아야합니다.

  • 는 I 입력을 해석 및 출력 포맷에 다른 오브젝트를 사용 SimpleDateFormat. 이것은 차이점을 볼 수 있었고 Java의 단순한 Date 객체가 시간대를 저장하지 않기 때문입니다. 출력 형식을 지정하는 데 사용되는 SimpleDateFormat에 명시 적으로 시간대를 설정해야합니다 (클래스 생성자 참조).