2

Java での日付と時刻の変換に問題があります。

実際には、ファイルから文字列を読み取り、その文字列をスプリントして文字列配列に格納し、この配列でいくつかの変数を初期化しています。私の問題は、この値を別のファイルに保存していることです。保存中に日付形式が変更され、コードを投稿しています。

ファイルから読み取っている文字列:

Wed May 02 12:07:54 EST 2012、テスト 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、テスト 1,20 のタスク 1
4

3 に答える 3

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 に答える
1

では機能しないため、@GrefHNZの回答には同意しませんlist[0] = Wed May 02 12:07:54 EST 2012。水曜日と 5 月は入力で解析できません。

私はこの解決策を作成しました(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");
}

理解するには、 Oracle のドキュメントSimpleDateFormatを読んでください。

于 2012-05-19T12:16:14.607 に答える
0

メソッドを使用して、解析せず.toString()に変換this.weightしてみてください。String

于 2012-05-19T10:56:49.207 に答える