簡體   English   中英

將SimpleDateFormat解析為JodaTime

[英]parsing SimpleDateFormat to 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());

我想得到一個jodatimeså,我的日歷可以根據日期和所需的時間對對象進行排序。

當我運行代碼並想要顯示jodatime時,出現以下錯誤:

java.lang.IllegalArgumentException: Invalid format: "java.text.SimpleDateFormat@b93b42a0"
    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)

TL;博士

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

java.time

不要使用麻煩的舊日期時間類。 另外,現在處於維護模式Joda-Time項目建議遷移到java.time類。 對於Android,請參閱下面的最后一個項目符號中提到的ThreeTenABP項目。

您尚未定義周數的含義。 有很多方法可以定義一年中的一周。 我將假設您的意思是第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

看到此代碼在IdeOne.com上實時運行

順便說一句……雖然沒有反向移植到較舊的Android,但其他Java平台也可以使用ThreeTen-Extra庫中漂亮的YearWeek類進行此類工作。


關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參見Oracle教程 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310

在哪里獲取java.time類?

您只是傳遞不起作用的對象的toString。 嘗試這樣的事情

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");
}

在這里閱讀更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM