您可以從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提供的終端窗口:
幾件事情需要注意:
- 我用一個簡單的
String
輸入創建的Scanner
對象在主要方法。您的代碼需要從不同的來源獲得輸入。
- 我使用不同的
SimpleDateFormat
對象來分析輸入並格式化輸出。這是因爲你可以看到差異,並且因爲Java的簡單Date
對象不存儲時區。您必須明確設置用於格式化輸出的SimpleDateFormat
時區(請參閱類構造函數)。
那麼*輸入*是什麼樣子?假設這是在一個文件中,該文件是什麼樣子的?有任何數量的潛在表示。 – 2013-05-01 19:11:33
000005,TF-68670,AB-312172,Fri Jan 04 00:00:00 GMT 2013,2 – 2013-05-01 19:12:19
這是一個非常難看的格式來解析:(仍然是可行的,你可能需要設置你的掃描儀使用','作爲令牌分隔符,然後使用SimpleDateFormat解析它。 – 2013-05-01 19:15:30