Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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 joda time解析日期和时间中的解析异常_Java_Jodatime - Fatal编程技术网

Java joda time解析日期和时间中的解析异常

Java joda time解析日期和时间中的解析异常,java,jodatime,Java,Jodatime,问题很简单,我有一个TimerTask,它将每天或每周安排一次。(取决于配置文件中给定的开始日期和期间)。 因此,在配置文件中,我指定了一周中的哪一天和执行时间,以及执行之间的时间间隔。但Joda Time拒绝与我的约会对象合作:( 以下是基本输入: String input = "Tue 12:00:00"; DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE HH:mm:ss"); DateT

问题很简单,我有一个TimerTask,它将每天或每周安排一次。(取决于配置文件中给定的开始日期和期间)。 因此,在配置文件中,我指定了一周中的哪一天和执行时间,以及执行之间的时间间隔。但Joda Time拒绝与我的约会对象合作:(

以下是基本输入:

String            input     = "Tue 12:00:00";
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE HH:mm:ss");
DateTime dateTime = DateTime.parse(input, formatter); // Here parse exception is thrown...
异常消息:
java.lang.IllegalArgumentException:无效格式:“周二12:00:00”


有人能解释一下为什么我不能像那样解析这个日期,也许能给我指出解决这类问题的正确方向。当然,我可以手动解析日期并在日历中设置内容,但如果有像Joda Time这样的东西可以为我做,我不想重新发明轮子。

工作日文本
Tue
可能与默认区域设置不匹配

DateTimeFormatter formatter = 
        DateTimeFormat.forPattern("EEE HH:mm:ss").withLocale(Locale.ENGLISH);

工作日文本
Tue
可能与默认区域设置不匹配

DateTimeFormatter formatter = 
        DateTimeFormat.forPattern("EEE HH:mm:ss").withLocale(Locale.ENGLISH);

您可以使用区域设置。以下代码运行良好

import java.util.Locale;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Test22 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DateTime currentDate = new DateTime();
        DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE HH:mm:ss").withLocale(Locale.ENGLISH);
        String formatedDate = dtf.print(currentDate);
        System.out.println(formatedDate);
        DateTime now = dtf.parseDateTime(formatedDate);
        System.out.println(now);
    }

}
输出: 星期四23:36:33

2000-12-28 23:36:33.000+06:00


资源链接:

您可以使用区域设置。以下代码运行良好

import java.util.Locale;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Test22 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DateTime currentDate = new DateTime();
        DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE HH:mm:ss").withLocale(Locale.ENGLISH);
        String formatedDate = dtf.print(currentDate);
        System.out.println(formatedDate);
        DateTime now = dtf.parseDateTime(formatedDate);
        System.out.println(now);
    }

}
输出: 星期四23:36:33

2000-12-28 23:36:33.000+06:00


资源链接:

另一个问题,我可以将此日期设置为相对于当前周或日期的日期吗?因此,当我想要星期二时,它将是从今天开始的下一个星期二?谢谢帮助。听起来你只想在日期上加1周,即
dateTime.plusWeeks(1)
不太可能,解析后的日期
周二12:00:00
似乎是:
2000-12-26T12:00:00.000+01:00
。您在初始日期中没有提供任何日期元素(天、月、年),所以Jodatime使用的是
2000年的日期元素。我解决了这个问题:只需使用
DateTime.now().withDayOfWeek(…).withTime(…)
我在哪里提供从配置文件获得的解析日期时间的信息:DAnother问题,我是否可以将此日期设置为相对于当前周或日期的日期?因此,当我想要星期二时,它将是从今天开始的下一个星期二?感谢帮助。听起来您只想在日期上添加1周,即
DateTime.plusWeeks(1)
不太可能,解析后的日期
周二12:00:00
似乎是:
2000-12-26T12:00:00.000+01:00
。您在初始日期中没有提供任何日期元素(天、月、年),所以Jodatime使用的是
2000年的日期元素。我解决了这个问题:只需使用
DateTime.now().withDayOfWeek(…).withTime(…)
其中我提供了从配置文件:D中获得的解析日期时间的信息