我在java中遇到日期和时间转换问题。
实际上我正在从一个固定该字符串的文件中读取一个字符串并将其存储到一个字符串中 字符串数组,现在用这个数组初始化一些变量。我的问题是 我将此值保存到另一个文件,保存时,日期格式正在改变,我发布了我的代码。
我正在从文件中读取字符串:
Wed May 02 12:07:54 EST 2012,Task 1 for Test 1,20
我写过的代码:
String s = br.readLine();
String[] list = s.split(",");
this.description = list[0];
this.weight = Integer.parseInt(list[1]);
this.dueDate = new Date(list[2]);
//this.dueDate = dateFormat.parse(list[2]);
//SimpleDateFormat dateFormat = new SimpleDateFormat("E,dd MMM yyyy HH:mm.ss");
pw.println(description + "," + weight + "," + dueDate);
我的代码输出:
Thu May 03 03:07:54 EST 2012,Task 1 for Test 1,20
答案 0 :(得分:1)
您需要使用SimpleDateFormat
解析输入日期。
假设您的输入数据已按照您发布的格式进行格式化(因此日期为list [0]),请改为:
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
this.dueDate = dateFormat.parse(list[0]);
重要的是你要告诉它检查时区(zzz
)。
这应该找出所描述的正确,实际的时间。
如果您只是打印出来,它将(默认情况下)打印在您当地的时区。
答案 1 :(得分:1)
我不同意@GrefHNZ答案,因为它不适用于list[0] = Wed May 02 12:07:54 EST 2012
。无法在输入中解析星期三和五月。
我制作了这个解决方案(仅适用于JDK7):
public static void main(String[] args)
String s = "Wed May 02 12:07:54 EST 2012,Task 1 for Test 1,20";
String[] list = s.split(",");
String dateDesc = list[0];
String dateToParse = createStringToParse(dateDesc); //return "3 05 02 12:07:54 CEST 2012"
SimpleDateFormat dateFormat = new SimpleDateFormat("u MM dd kk:mm:ss z yyyy");
Date dueDate=null;
try {
dueDate = dateFormat.parse(dateToParse);
} catch (ParseException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(dueDate); //print "Wed May 02 12:07:54 CEST 2012"
}
private static String createStringToParse(String dateDesc) {
int idx=dateDesc.indexOf(" ");
String day = dateDesc.substring(0,idx);
String month = dateDesc.substring(idx+1,dateDesc.indexOf(" ",idx+1));
String rest = dateDesc.substring(dateDesc.indexOf(month)+month.length());
switch(day){
case "Mon" :
day="1";break;
case "Tue" :
day="2";break;
case "Wed" :
day="3";break;
case "Thu" :
day="4";break;
case "Fri" :
day="5";break;
case "Sat" :
day="6";break;
case "Sun" :
day="7";break;
}
switch(month){
case "Jan" :
month="01";break;
case "Feb" :
month="02";break;
case "Mar" :
month="03";break;
case "Apr" :
month="04";break;
case "May" :
month="05";break;
case "Jun" :
month="06";break;
case "Jul" :
month="07";break;
case "Aug" :
month="08";break;
case "Sep" :
month="09";break;
case "Oct" :
month="10";break;
case "Nov" :
month="11";break;
case "Dec" :
month="12";break;
}
return day+" "+month+rest.replace("EST", "CEST");
}
要了解SimpleDateFormat
阅读Oracle documentation。
答案 2 :(得分:0)
尝试使用.toString()
方法并将this.weight
转换为String
而不进行解析。