将SimpleDateFormat解析为JodaTime
即时通讯从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)
回答:
你只是路过对象的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
回答:
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类?
- Java SE 8,Java SE 9,后来
- 内置。
- 带捆绑实现的标准Java API的一部分。
- Java 9增加了一些次要功能和修复。在ThreeTen-Backport
- Java SE 6和Java SE 7
- 大部分的java.time功能后移植到Java 6 & 7。
- Android
- 的ThreeTenABP项目适应ThreeTen-反向移植(上述)为Android特异性。
- 请参阅How to use ThreeTenABP…。
以上是 将SimpleDateFormat解析为JodaTime 的全部内容, 来源链接: utcz.com/qa/257431.html