2

我在java中遇到日期和时间转换问题。

实际上,我正在从一个文件中读取一个字符串,该文件将该字符串拆分并将其存储到一个字符串数组中,现在用这个数组初始化一些变量。我的问题是我将此值保存到另一个文件中,在保存时,日期格式正在更改我发布我的代码。

我正在从文件中读取的字符串:

2012 年 5 月 2 日星期三 12:07:54 EST,测试 1,20 的任务 1

我写的代码:

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
4

3 回答 3

1

我不同意@GrefHNZ 的回答,因为它不适用于list[0] = Wed May 02 12:07:54 EST 2012. Wed 和 May 无法在输入中解析。

我做了这个解决方案(仅适用于 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 文档

于 2012-05-19T12:16:14.607 回答
1

您需要使用SimpleDateFormat解析输入日期。

假设您的输入数据按照您发布的格式进行了格式化(因此日期为 list[0]),请将其放入:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
this.dueDate = dateFormat.parse(list[0]);

重要的是您告诉它检查时区 ( zzz)。这应该算出所描述的正确的、实际的时间。

如果您只是打印出来,它将(默认情况下)在您当地的时区打印。

于 2012-05-19T11:22:11.607 回答
0

尝试使用该.toString()方法并将您的转换this.weightString不解析。

于 2012-05-19T10:56:49.207 回答