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


public void readData(Scanner scanner) 
    { 

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

    } 

我怎樣才能通過掃描儀讀取日期類型的字段的startDate讀式日期的領域,我曾嘗試到外地轉換爲字符串,並通過掃描儀讀取它,但我不工作由掃描儀

+0

那麼*輸入*是什麼樣子?假設這是在一個文件中,該文件是什麼樣子的?有任何數量的潛在表示。 – 2013-05-01 19:11:33

+0

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

+1

這是一個非常難看的格式來解析:(仍然是可行的,你可能需要設置你的掃描儀使用','作爲令牌分隔符,然後使用SimpleDateFormat解析它。 – 2013-05-01 19:15:30

回答

1

您可以從Scanner對象中讀取爲String的字段,然後使用SimpleDateFormat解析該字符串。

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()); 
    } 
} 

下面是輸出的外觀BlueJ提供的終端窗口:

Scanned Date output

幾件事情需要注意:

  • 我用一個簡單的String輸入創建的Scanner對象在主要方法。您的代碼需要從不同的來源獲得輸入。
  • 我使用不同的SimpleDateFormat對象來分析輸入並格式化輸出。這是因爲你可以看到差異,並且因爲Java的簡單Date對象不存儲時區。您必須明確設置用於格式化輸出的SimpleDateFormat時區(請參閱類構造函數)。