2013-05-01 196 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时区(请参阅类构造函数)。