2017-12-02 118 views
0

即時通訊從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()); 

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

當我運行的代碼,並要顯示的jodatime,我得到這個錯誤:

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

你只是路過對象的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"); 
} 

更多here

1

TL;博士

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

java.time

不要使用舊麻煩日期時間類。此外,Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。對於Android,請參閱下面最後一個項目符號中提到的ThreeTenABP項目。

您尚未定義您的週數。有很多方法可以定義一年的一週。我假定你的意思是第一週的標準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和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?