2011-07-09 6 views
0

に別々のJSON値から文字列への日付私はこの日付を使用して、SQLデータベースに保存する必要がある日付ジャワ、日付

date": { 
"year": 2011, 
"month": 5, 
"dayOfMonth": 30, 
"hourOfDay": 16, 
"minute": 13, 
"second": 47 
}, 

が含まれている私のアプリに返されるJSONオブジェクトを持っている、ほとんどのJSON関数をJavaで使用して解析します。

ここでは、セクション全体を、時と分の間の日付とコロンの間のダッシュを含む文字列としてフォーマットしようとしています。私はのSimpleDateFormatとそれを解析できることを期待して、それはこのことについてに行くための最善の方法だろう何parserexceptionerror

dataObj.getJSONObject("dateObject").getString("year") + "-" + 
dataObj.getJSONObject("dateObject").getString("month") + "-" + 
dataObj.getJSONObject("dateObject").getString("dayOfMonth") + " " + 
dataObj.getJSONObject("dateObject").getString("hourOfDay") + ":" + 
dataObj.getJSONObject("dateObject").getString("minute") + ":" + 
dataObj.getJSONObject("dateObject").getString("second"); 

で失敗?

私はJSON文字列を取り出し、理想的には文字列に変換できる読み取り可能な日付に結合する必要があります。これは、フォーマットされた日付(例えば、simpledateformatなど)でもかまいません。また、ミリ秒単位で指定することもできます。

インサイトは、あなたがまだの場合は、JSONのシリアル化を行い、より簡単に、逆シリアル化JSONライブラリを見てみる必要があります

+0

受信したJSONのさまざまな部分から構築されたStringからjava.util.Dateインスタンスに変換するために、日付書式を指定できると確信しています。どのような日付形式のパターンを試しましたか? –

+0

JSON処理の例では、dataObj.getJSONObject( "dateObject")の呼び出しをJSONObjectのdateJson = dataObj.getJSONObject( "dateObject")で置き換えることができます。 dateJson.getString( "year")+ " - " +これはパフォーマンス上の改善をもたらしますが、これは問題ではありません。また、関連する小さな変更は6回でなく、1回だけ行う必要があるため、コードをより保守性の高いものにするのに役立ちます。 –

答えて

1

...目標はjava.util.Dateインスタンスに、「2011年5月30日16時13分47秒」として、例えばフォーマットされた日付情報の文字列表現を、変換することであると仮定すると

String dateString = "2011-5-30 16:13:47"; 
Date date = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString); 
System.out.println(date); 
// output: Mon May 30 16:13:47 MST 2011 

String dateString2 = "2011-11-3 16:13:47"; 
Date date2 = new SimpleDateFormat("yyyy-M-dd HH:mm:ss").parse(dateString2); 
System.out.println(date2); 
// output: Thu Nov 03 16:13:47 MST 2011 

アン代わりに、すべてのJSON入力値をJava intに変換してからCalendar.getInstance().set(year + 1900, month, date, hrs, min, sec).getTime()を使用します。

+0

これは私のために働きました。非常に柔軟です。私は間違った "SimpleDateFormat"シードを使用していました。おそらく私の文字列を見ているあなたの '' yyyy-M-dd HH:mm:ss "'にフォーマットを修正し、パーサの例外を止めました! – CQM

1

をおくります。 JacksonとGoogleのGSONはどちらも優れています。

JSONライブラリは、日付JSON文字列をjava.util.Dateオブジェクトに読み込む方法を知っています。その後、データベースにdatetime列で格納することができます。データベースに適切な日時データ型として日付を格納する利点は、2つの日付間のすべてのレコードを選択する必要がある場合など、クエリーをより簡単に作成できることです。それが文字列であれば、クエリはすばやく醜くなります。もうひとつdatetimeについては、固定長のカラムに格納されているため(多くのデータベース実装でミリ秒のlong値を格納するため)、ストレージが効率的です。文字列として格納すると、SimpleDateFormatで完全に列挙されたすべての文字を数え始めると、より多くのスペースを簡単に取ることができます。その結果、datetimeに索引を作成する方が、可変長ストリング列に索引を作成する方が効率的になります。

+0

有益ですが、JSON関数が日付オブジェクトとして読み取れる形式の 'date'というタイトルのJSONオブジェクトですか?私は現在、このオブジェクトが私にどのように返されているかを題材にしています – CQM

+0

投稿したJSONは標準の日付フォーマットではありません。年、日、月などのフィールドを持つ独自のモデルオブジェクト、MyDateを作成する必要があります。 GSONはJSON文字列をそのオブジェクトのインスタンスに変換できます。あなたのモデルオブジェクトは、あなたの人生を少し楽にするためにフィールドからjava Calendar/Dateオブジェクトを構築する便利なメソッドを持つことができます。 –

+0

GsonやJackson、またはjava.util.Dateへの変換を大幅に簡単にするために見た他のJSON処理APIには何もありません。このようなAPIは、JavaをJSONとの間でシリアライズ/デシリアライズする方が便利です。 –