0

私の Android アプリには、2012 年 7 月 4 日の場合は 201274、2012 年 10 月 16 日の場合は 20121016 のようにフォーマットされた日付を持つデータベースがあります。 2012-10-16 を表示します。コードは次のようになります。

    private void convertDBdate() {
    convertDateTextView.setText(gotDt);

    String dateStr = convertDateTextView.getText().toString();
    SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyyMd");
    SimpleDateFormat outputFormatter = new SimpleDateFormat("yyyy-MM-dd");

    try { 
        DBdate = inputFormatter.parse(dateStr); 
        dashDateStr = outputFormatter.format(DBdate); 

        convertFinalDateTV.setText(dashDateStr); 
    } catch (ParseException e ) { 
        e.printStackTrace(); 
    }

このコードでは、201274 は 2012-07-04 として正しく表示されますが、2 桁の月が正しく表示されず、20121016 は 2012-01-16 (1 月 16 日) と表示されます。問題は MM と dd にあります。出力日付形式として yyyy-M-dd を試しましたが、2012-1-16 (再び 1 月 16 日) が表示されます。

どういうわけかM値を分離して、その月+ 1のことをしなければなりませんか? もしそうなら、それはどのように書かれ、どこに行きますか?

2012 年 7 月 4 日のデータベースの日付を 20120704 に書き換える必要はありません。コードで修正できるようにしたいと考えています。

4

2 に答える 2

1

あなたの問題は、入力フォーマッタが常に yyyyMMdd である必要があるということではありませんが、時にはyyyyMMdd である必要があるということです

201274 の場合、MM の入力形式は適用されませんが、20121016 の場合は適用されます。

入力の長さを解析し、適切なフォーマッタを選択するロジックを追加する必要があります。

いくつかの論理を提案する前に、2 つの質問をする必要があります

  1. データベースで 2012 年 10 月 1 日をどのように表現しますか? その場合は2012101だと思います...
  2. 2012111 と 2012111 はどのように区別しますか? つまり、2012-11-01 と 2012-01-11
于 2012-10-16T17:05:08.293 に答える
0

このプロジェクトには遅すぎるかもしれませんが、将来のプロジェクトでは常に使用することをお勧めします

Date.getTime()

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getTime()

データベースに必要なスペースが少なくて済み、ソートが高速になり、現在抱えている問題を回避できるため、日付を格納することもできます。

于 2012-10-16T17:21:17.697 に答える