通过扫描仪读取Date类型的字段

时间:2013-05-01 19:09:48

标签: java date methods java.util.scanner bluej

   private Date startDate;


 public void readData(Scanner scanner)
    {

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

    }

如何通过扫描仪读取类型日期的字段startDate,我已尝试将字段转换为字符串并由扫描仪读取但我无法正常工作

1 个答案:

答案 0 :(得分:1)

您可以从String对象中以Scanner的形式阅读该字段,然后使用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

有几点需要注意:

  • 我在main方法中使用简单的Scanner创建了String对象作为输入。您的代码需要从其他来源获取输入。
  • 我使用了不同的SimpleDateFormat对象来解析输入和格式化输出。这样你就可以看到差异,因为Java的简单Date对象不存储时区。您必须在用于格式化输出的SimpleDateFormat上显式设置时区(请参阅类构造函数)。