2011-11-07 4 views
1

Stringのテキストを、yyMMddの形式のテキストファイルから読み込みます。それをdateに変換しますが、それを行うと失われますフォーマット。ここで私は文字列を日付に変換して正しい形式を維持する方法

String strDate = matcher.group(10); // strDate would contain 111107 

SimpleDateFormat formatter1 = new SimpleDateFormat("yyMMdd"); 
Date date = formatter1.parse(strDate); // after parsing it, the format changes to Thu Nov 03 00:00:00 EDT 2011 

を試してみましたが、何のexmapleである。しかし、私はdateを取るので、String tDate = formatter1.format(date);文字列のような文字列に戻しますならば、Idは111107を見たい形式で日付が含まれています。

これを行う方法はありますか?多分Stringの代わりにdateオブジェクトを返すようにformat関数を呼び出す方法があれば、ありがとう。

編集 私はマップから日付がもっとあれば、私はその後、その後、yyMMdd形式でもある現在の日付にこれらの日付を比較して、ファイルからで日付のリストを読んで、マップにそれらをロードします現在の日付より1週間早く、ユーザーに入力を促し、yyMMdd形式のファイルに日付とその他の関連情報を書き込みます。私はマップを使用する理由は、テキストファイルの各行は、いくつかの情報と一意の名前が含まれている、と私はそれが

を役に立てば幸い、ここ map.get(aName)

はコードで行うので、私は、データの特定の行の日付を比較しました

dbConnect(); 
      stmt = conn.createStatement(); 
      String query = "select * from OBJECT_BAC_EV where instance = 12";//VALUE <> 'Normal'"; 
      rslt = stmt.executeQuery(query); 

      Calendar currentDate = Calendar.getInstance(); 
      SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd"); 
      String dateNow = formatter.format(currentDate.getTime()); 
      Date curDate = (Date)formatter.parse(dateNow); 
      currentDate.setTime(curDate); 
      currentDate.add(Calendar.DAY_OF_MONTH, -7); 
      dateNow = formatter.format(currentDate.getTime()); 
      curDate = (Date)formatter.parse(dateNow); 

      Calendar cDate = Calendar.getInstance(); 
      SimpleDateFormat f = new SimpleDateFormat("yyMMdd"); 
      String strDate = f.format(cDate.getTime()); 

      while(rslt.next()) 
      { 
       System.out.println(rslt.getRow()); 

       String aValue = rslt.getString("VALUE"); 
       String aName = rslt.getString("NAME"); 
       String aObjRef = rslt.getString("ObjRef"); 


       if(aNoteMap.containsKey(aName)) 
       { 

        String n = aNoteMap.get(aName); 
        if(aDateMap.get(aName).before(curDate)) 
        { 
         int answer = JOptionPane.showConfirmDialog(null, "Would you like to use last weeks note? " + n, "Hey", JOptionPane.YES_NO_OPTION); 
         if(answer == JOptionPane.YES_OPTION) 
         { 
          output.write(aName + " " + aObjRef + " " + aValue + " " + aDateMap.get(aName) + " " 
            + n + (System.getProperty("line.separator"))); 
         } 
         else if(answer == JOptionPane.NO_OPTION) 
         { 
          String newNote = JOptionPane.showInputDialog("Enter new note"); 
          output.write(aName + " " + aObjRef + " " + aValue + " " + aDateMap.get(aName) + " " 
            + newNote + (System.getProperty("line.separator"))); 
         } 
        } 
        else 
         output.write(aName + " " + aObjRef + " " + aValue + " " + aDateMap.get(aName) + " " 
           + n + (System.getProperty("line.separator"))); 
       } 
       else 
        output.write(aName + " " + aObjRef + " " + aValue + " " + strDate + " " 
          + "" + (System.getProperty("line.separator"))); 
      } 
      System.out.println("its closing output.."); 
      output.close(); 
     } 

答えて

3

Dateクラスには「内部」形式はなく、日付要素のみを表します。 String tDate = formatter1.format(date);

「間違った形式」と思われる理由は、出力しようとすると、デフォルトでtoString()になるからですあなたが望むようにフォーマットしません。

この日付をどのように使用するか(コードを含める)の詳細については、フォーマッタを注入する方法についての提案を提供することができます。 joda-timeを使って書かれ

+0

私はいくつかのコードだけでなく何をしようとしているかについて、もう少し詳しく説明しました – Beef

2

Dateは常に時間を含む完全な情報を格納します。時刻情報が含まれていないSimpleDateFormatの日付を解析すると、これらのフィールドは、例のように0に設定されます。

Dateは、フォーマット情報そのものを格納しません。

1

が、それはこの希望:

String str = "110107"; 
DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    .appendYearOfCentury(2, 2) 
    .appendMonthOfYear(2) 
    .appendDayOfWeek(2) 
    .toFormatter(); 

DateTime dateFromDB = formatter.parseDateTime(str);//create DateTime instance 
System.out.println("Date:" + formatter.print(dateFromDB));//toString in required format 

をそして、それは他の多くの利点があり、どうやらそれは、今後のJavaのリリースでは、常にかなり痛みを伴うされている既存のJava日付LIBSを、置き換えられます。

利点の一つは、

DateTime now = new DateTime(); 
Integer compared = now.minusWeeks(1).compareTo(dateFromDB); 

あるとのcompareToはSimpleDateFormat.formatメソッドは常に文字列を返すexpected

2

を行います。これは、指定された形式のString型の 'date'パラメータを表します。例:

SimpleDateFormat sdf = new SimpleDateFormat('yyMMdd'); 
Date date = sdf.parse("110510"); 
String sDate = sdf.format(date); //"110510" 

SimpleDateFormat sdf2 = new SimpleDateFormat('yyyy.MM.dd'); 
String sDate2 = sdf2.format(date); //2011.05.10 

Dateオブジェクトをフォーマットするのに最適です。

class MyDate extends java.util.Date { 
    static final SimpleDateFormat yymmddFormat = new SimpleDateFormat("yyMMdd"); 

    public MyDate (String s) throws ParseException { 
    super(yymmddFormat.parse(s).getTime()); 
    } 

    public String toString() { 
    return yymmddFormat.format(this); 
    } 
} 

使用あなたが現在Dateオブジェクトを使用して、どこでも、このクラス:

1

あなたのような何かを試みることができます。これはあなたが望むようにあなたのすべての日付を見せるべきです。

関連する問題