private Date startDate;
public void readData(Scanner scanner)
{
// String dates = DateUtil.convertDateToShortString(startDate);
dates = scanner.next();
}
如何通过扫描仪读取类型日期的字段startDate,我已尝试将字段转换为字符串并由扫描仪读取但我无法正常工作
答案 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终端窗口中的显示方式:
有几点需要注意:
Scanner
创建了String
对象作为输入。您的代码需要从其他来源获取输入。SimpleDateFormat
对象来解析输入和格式化输出。这样你就可以看到差异,因为Java的简单Date
对象不存储时区。您必须在用于格式化输出的SimpleDateFormat
上显式设置时区(请参阅类构造函数)。