首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SimpleDateFormat解析为JodaTime

将SimpleDateFormat解析为JodaTime
EN

Stack Overflow用户
提问于 2017-12-03 01:09:43
回答 2查看 314关注 0票数 0

我正在从week creating创建一个日期,并且只是一周中的某一天。我已经用SimpleDateFormat成功地做到了这一点,但我想把它保存为jodatime,我已经尝试了很多方法,但都没有真正起作用。

到目前为止,这是我的代码。

代码语言:javascript
复制
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());

我想得到一个我的日历kan根据日期和必要的时间对对象进行排序的jodatime Sç。

当我运行代码并想要显示jodatime时,我得到了这个错误:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2017-12-03 13:54:30

tl;dr

代码语言:javascript
复制
LocalDate.now().with( WeekFields.ISO.weekOfWeekBasedYear(), weekOfYear )
               .with( WeekFields.ISO.dayOfWeek(), dayOfWeek )

java.time

不要使用麻烦的旧date-time类。此外,现在maintenance mode中的Joda-Time项目建议迁移到java.time类。对于Android,请参阅下面最后几个项目中提到的ThreeTenABP项目。

您还没有定义周数是什么意思。有很多方法可以定义一年中的一周。我假设你指的是第一周的标准ISO 8601定义,第一周是日历的第一个星期四,星期一是每周的第一天。

使用WeekFields类,特别是WeekFields.ISO对象。

代码语言:javascript
复制
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 ) ;

转储到控制台。

代码语言:javascript
复制
System.out.println( "2017-W27-02: " + adjusted ) ; 

2017-W27-02: 2017-07-04

请参阅此code run live at IdeOne.com

顺便说一句,…虽然没有向后移植到较旧的安卓系统,但其他Java平台可以使用库中漂亮的YearWeek类来完成这类工作。

关于java.time

java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

现在在maintenance mode中的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle Tutorial。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310

从哪里获取java.time类?

  • ,,以及后来内置的
    • 。与implementation.
    • Java 9捆绑在一起的标准Java API的
    • 部分添加了一些次要功能和fixes.

  • 和.

中的

  • 许多java.time功能已向后移植到Java6和7

适用于安卓specifically.

  • See .

    • 项目适配ThreeTen-Backport (如上所述

票数 1
EN

Stack Overflow用户

发布于 2017-12-03 01:21:41

你只是在传递object的toString,这是不会起作用的。试试这样的东西

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47610389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档