2017-12-02 8 views
0

imはweeknumberから曜日を作成し、曜日のみを作成します。これは私が正常にSimpleDateFormatでやったことがありますが、私はjodatimeとして保存したい、私は多くのことを試してみましたが、実際には何もしませんでした。SimpleDateFormatからJodaTimeを解析する

これは、これまでの私のコードです。

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.WEEK_OF_YEAR, week_of_year); 
cal.set(Calendar.DAY_OF_WEEK, day_of_week); 
sdf.format(cal.getTime()); 

DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss"); 
DateTime jodatime = dtf.parseDateTime(sdf.toString()); 

私は、自分のカレンダーかんたんの日付、時間に基づいてオブジェクトを並べ替えることを望んでいます。あなたは、単に動作しませんオブジェクトののtoStringを渡している

java.lang.IllegalArgumentException: Invalid format: "[email protected]" 
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945) 
    at com.example.casper.autimeplan.Fragments.ScheduleFragment$MyJavaScriptInterface.getBasicInfo(ScheduleFragment.java:282) 
    at com.example.casper.autimeplan.Fragments.ScheduleFragment$MyJavaScriptInterface.access$400(ScheduleFragment.java:186) 
    at com.example.casper.autimeplan.Fragments.ScheduleFragment$MyJavaScriptInterface$1.run(ScheduleFragment.java:203) 

答えて

0

:私は、コードを実行し、jodatimeを表示したい場合は

は、私はこのエラーを取得します。 here

1

TL続きを読むこの

private static String parseDateTime(String input){ 
    String pattern = "MM/dd/yyyy HH:mm:ss"; 
    DateTime dateTime = DateTime.parse(input, DateTimeFormat.forPattern(pattern)); 
    return dateTime.toString("MM/dd/yyyy HH:mm:ss"); 
} 

ような何かをしようと、DRは

LocalDate.now().with(WeekFields.ISO.weekOfWeekBasedYear(), weekOfYear) 
       .with(WeekFields.ISO.dayOfWeek(), dayOfWeek) 

java.time

は面倒古い日時のクラスを使用しないでください。また、Joda-Timeプロジェクトはmaintenance modeにあり、java.timeクラスへの移行を推奨しています。 Androidについては、以下の最後の箇条書きで述べたThreeTenABPプロジェクトを参照してください。

あなたは週番号で何を意味するのかを定義していません。 1年の週を定義する方法はたくさんあります。私はあなたがカレンダーの最初の木曜日を持つ週#1の標準ISO 8601の定義を意味し、月曜日は毎週の最初の日であると仮定します。

WeekFieldsクラス、具体的にはWeekFields.ISOオブジェクトを使用します。

long weekOfYear = 27 ; // 1-52 or 1-53 for ISO 8601 week-based years. 
long dayOfWeek = 2 ; // 1-7 for Monday-Sunday, per ISO 8601 standard. 

LocalDate today = LocalDate.now(ZoneId.of("America/Montreal")) ; 
LocalDate adjusted = today.with(WeekFields.ISO.weekOfWeekBasedYear(), weekOfYear) 
          .with(WeekFields.ISO.dayOfWeek(), dayOfWeek) ; 

コンソールにダンプします。

System.out.println("2017-W27-02: " + adjusted) ; 

2017-W27-02: 2017-07-04

このcode run live at IdeOne.comを参照してください。ところで

...バックポートされていないが、古いのAndroid、その他のJavaプラットフォームには、この種の仕事のためにThreeTen-Extraライブラリに気の利いたYearWeekクラスを使用することができます。 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…を参照してください。
関連する問題