2017-01-10 10 views
-1

私はそれがデフォルトISO8601形式yyyy-MM-dd'T'HH:mm:ss.SSSZで日付を返すされたDateTimeジョダのDateTime不適切な形式

public DateTime getCreated() { 

    return jodatime; 
} 

を返す関数を持っています。私はyyyy-MM-dd HH:mm:ss zの形式でDateTimeを返すことができるかどうかを知りたい。

私がやっている:

public DateTime getCreated() { 

    DateTimeFormatter dtfOut = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss z"); 
    DateTime jodatime = dtfOut.parseDateTime(created.toString(dtfOut)); 

    return jodatime; 
} 

それはそれはまだデフォルトのフォーマットに戻っている返すたびに。これは私にとっては奇妙なことです。なぜなら、私がcreated.toString(dtfOut)を出力すると、正しい形式で日付が出力されるからです。すべての提案は、文字列を返すにつながるが、私はあなたが文字列にあなたの日付/時刻オブジェクトを変換ときに適用DateTime型にのみ

+2

「DateTime」にはフォーマットがありません。それは単に日付と時刻を表します。フォーマットは 'String'値に変換することによって' DateTimeFormatter'によって追加されます。 –

+0

これはできないのですか? – gd000

+1

あなたがそれを表示しようとしているときに 'DateTime'をフォーマットしてください。 –

答えて

4

DateTimeは、のフォーマットを有する。そのtoString()は特定の固定フォーマットを出力しますが、それは主にデバッグツールです。

あなたの方法は、フォーマットされた日付文字列を返すようにしたい場合は、それはStringを返す必要があり、ないDateTime

private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss z"); 

String getCreatedAsString() { 
    return dateTimeFormatter.print(created); 
} 

それはおそらくcreatedを得ることから書式を分離するクリーナーです。たとえば、getCreated()Fileのメソッドである場合、Fileは、特定のUIがどのように表示されるかについては何も知らないはずです。

プレゼンテーションレイヤで任意の書式設定を行います。

System.out.println("Created: " + dateTimeFormatter.print(file.getCreated()); 
+0

いいですね...それが好きです。プラス1つそこに;-) – GhostCat

+0

返信ありがとう – gd000

2

フォーマットを返却する必要があります。またはデータ/時間から文字列を作成するときに使用します。

つまり、これは「設計どおりに動作します」。

日付/時刻オブジェクトは、それが作成された形式についてははありません。です。またはある時点でフォーマットされます!

意味:getCreated()によって返されたオブジェクトが文字列に変換されるとき、、次にという形式が使用されます。 の場合は、の形式で入力してください。 次にあなたはあなたが求めているものを手に入れます - あなたがフォーマットを提供していない場合に起こる "デフォルト"ではありません!

関連する問題