2017-05-12 11 views
0

私はアンドロイドで時間ピッカーを持っています。ユーザーが時刻を選択すると、onTimeSetメソッドによって2つの整数(hourOfDayとminute)が返されます。その署名は怒鳴るようになります。ローカル時刻パターンとローカル日付パターンのみを取得するにはどうすればよいですか?

public void onTimeSet(TimePicker view, int hourOfDay, int minute); 

私が欲しいユーザーにローカルパターンで選ばれた時間を示すことです。だから、ブラジルやフランスでは、時間は14:30、米国では2:30 PMと見なされます。現時点では、アンドロイドは最後のものをサポートしていないので、私はジョーダン時間ライブラリではなくLocalTimeを使用しています。私がtoString(String pattern)メソッドを呼び出すことができるので、私が時間のStringパターンを得ることができれば、問題は解決されます。

LocalTime localTime = new LocalTime(hourOfDay, minute); 
localTime.toString(pattern /* to be found */) 

私は別のピッカーで同じ問題があります。ユーザーはの日付をと選択し、年、月、日の月が返されます。この場合、ブラジルまたはフランスでは、2000年12月1日に2000年1月12日と表示されます。

どうすればこの問題を解決できますか?何か案は?ジョダタイムライブラリは、チームがjava.timeクラスへの移行を助言し、メンテナンスモードになり、事前

+0

ヒント:翻訳とのために、特定の文化的規範のために、特定の人間の言語を使用してフォーマットされた文字列を参照するときに*(https://en.wikipedia.org/wiki/Internationalization_and_localization)[ローカライズ] *用語を使用します略語/句読点/発注。日時制作における「ローカル」という用語は、「タイムゾーンなしのUTCからのオフセットがない」という意味で、まったく別の問題です。 java.timeでは、 'Local ...'( 'LocalDate'、' LocalTime'、 'LocalDateTime')という名前のクラスはすべてno-offset-nor-zoneを意味します - それらの名前はローカライゼーションとは関係ありません。 –

答えて

2

感謝。

ThreeTenABPライブラリのjava.timeフレームワークを使用してください。

LocalDate ld = LocalDate.of(2017 , 1 , 23); 
LocalTime lt = LocalTime.of(12 , 23) ; 
ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.of(ld , lt , z); 

Locale l = Locale.CANADA_FRENCH ; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(l); 
String output = zdt.format(f); 

は、他のFormatStyleオブジェクト、他のオブジェクトLocale、他のゾーンを使用して、ofLocalizedDateまたはofLocalizedTimeを呼び出すことによって、あなたの好みに合わせて調整します。 java.timeについて


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

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。
関連する問題