Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将SimpleDataFormat解析为JodaTime_Java_Android_Jodatime_Simpledateformat - Fatal编程技术网

Java 将SimpleDataFormat解析为JodaTime

Java 将SimpleDataFormat解析为JodaTime,java,android,jodatime,simpledateformat,Java,Android,Jodatime,Simpledateformat,我从weeknumber创建一个日期,并且只创建一周中的一天。我已经用SimpleDataFormat成功地完成了这项工作,但我想将其另存为jodatime,我尝试了很多方法,但都没有真正起作用 这是到目前为止我的代码 SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.WEEK_OF_YEAR, we

我从weeknumber创建一个日期,并且只创建一周中的一天。我已经用SimpleDataFormat成功地完成了这项工作,但我想将其另存为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());
我想得到一个jodatime så,我的日历可以根据日期、时间对对象进行排序

当我运行代码并希望显示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)

您只是在传递一个无效的对象字符串。 试试这样的

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");
}
阅读更多

tl;博士 java.time 不要使用麻烦的旧日期时间类。此外,该项目现在正在进行中,建议迁移到类。对于Android,请参阅下面最后一个项目中提到的ThreeTenABP项目

您尚未定义周数的含义。有很多方法可以定义一年中的一周。我假设你指的是第一周的标准定义,日历的第一个星期四,星期一是每周的第一天

使用类,特别是对象

转储到控制台

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

看这个

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

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

,及以后 内置的。 标准JavaAPI的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大部分java.time功能都在中向后移植到Java6和Java7。 该项目特别针对Android采用了上述Three-Ten Backport。 看见
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 ) ;