1

テキストファイルを読み取るためにJavaでいくつかのコードを書き込もうとしていますが、以下の例のように(hh:mm)形式で時刻を読み取ると次のようになります。

6:30 14:30

文字列をデータ形式に変換するJavaコードがあります

DateFormat formatter = new SimpleDateFormat("hh:mm");
strLine = br.readLine();
strLine = strLine.trim();
tokens2 = strLine.split(" ");
System.out.println((Date)formatter.parse(tokens2[0]));

出力は次のようになります。

Thu Jan 01 06:30:00 AST 1970

長い形式の日付で表示されますが、タイムゾーン(06:30)を取得したいだけです。私は何をすべきか ?何かアドバイス。

編集:このコードによってJoda時間によって解決された問題:

LocalTime.parse(tokens2[0]);

時間がかかるだけです

4

4 に答える 4

5

まず、時間のパターンが間違っていHH:mmます。例では 24 時間制を使用しているため、使用する必要があります。

次に、 を解析していますDate。ADateはただの瞬間です: タイムゾーン、カレンダー、時間だけに関心があるのか​​、日付だけに関心があるのか​​などについてはわかりません。

第 3 に、基本的には を呼び出すだけなので、その出力が表示されますDate.toString()

Java には、「時刻」だけを表す型はありません (ちなみに、タイム ゾーンとはまったく同じではありません)。時刻の部分だけを含めるようにaをフォーマットすることもできますが、そうしたい場合は、DST の問題を回避するために UTC のタイム ゾーンを使用することを強くお勧めします。Date

より良い解決策は、タイプを持つJoda TimeLocalTimeを使用することです-状況に最適です。その ( ) を解析しDateTimeFormatter.parseLocalTime、適切に操作して、必要なときにいつでも (時間だけに) フォーマットできます。

于 2013-02-14T13:04:28.613 に答える
0

a は 2 つの方法で使用できSimpledateFormatterます。

  1. 文字列を解析して日付を作成する
  2. 日付から文字列を作成する

あなたの例では両方が必要です。まず、文字列を解析して日付を作成します (時間の部分だけに関心がある場合でも)。2 番目のステップでは、この日付から文字列を作成し、それを System.out に出力します。

Date date=formatter.parse(tokens2[0]);     //use the 'formatter' to parse the String
Sytem.out.println(formatter.format(date)); //use the 'formatter' to define the format of the output.
于 2013-02-14T13:04:39.503 に答える
0

java.time の使用

他の答えは正しいですが、現在は古くなっています。

このjava.time.LocalTimeクラスは、日付とタイム ゾーンのない時刻を表します。このクラスは、 24 時間制の HH:MM または HH:MM:SS を使用して、標準ISO 8601形式の文字列を直接解析できます。

LocalTime lt = LocalTime.parse( "14:30" );
String output = lt.toString();  // 14:30

書式設定

DateTimeFormatter他の形式が必要な場合は、を使用してください。ローカライズも自動で。

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL );
f = f.withLocale( Locale.CANADA_FRENCH ); // Cultural norms & human language
String output = lt.format( f );

java.time について

java.timeフレームワークは、Java 8 以降に組み込まれています。java.util.Dateこれらのクラスは、 、.Calendar、 &などの古い面倒な日時クラスに取って代わりますjava.text.SimpleDateFormat

Joda -Timeプロジェクトは現在メンテナンス モードにあり、java.time への移行を推奨しています。

詳細については、 Oracle チュートリアルを参照してください。また、Stack Overflow で多くの例と説明を検索してください。

java.time 機能の多くは、ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPでAndroidに適合されています。

ThreeTen -Extraプロジェクトは、追加のクラスで java.time を拡張します。このプロジェクトは、java.time. IntervalYearWeek、などの便利なクラスがここYearQuarterにあります。

于 2016-08-14T05:21:02.423 に答える