首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JodaTime不工作

JodaTime不工作
EN

Stack Overflow用户
提问于 2017-11-07 09:21:56
回答 1查看 771关注 0票数 1

我刚接触到android系统,在与jodatime的合作中遇到了困难。我在这里遇到了和很多人一样的错误,我已经尝试了所有的建议,但是没有什么对我有用。我试图将用户从日期和时间选择器(例如'dayNow,monthNow‘等)中选择的变量显示到一个名为“timeselected”的组合变量中,并将其设置为textbox,这样我就可以在jodatime中进一步执行计算。

守则如下:

代码语言:javascript
复制
            DateTime dateTime = new DateTime(timeselected);
            DateTimeFormatter fmt = DateTimeFormat.forPattern("dd MM yyyy" + "\n" + " h:mm a ");
            String formattedtime = fmt.print(dateTime);
            CalculateButton.setText(formattedtime);

            // Plus some hours, minutes, and seconds to the original DateTime.
            DateTimeFormatter fmt2 = DateTimeFormat.forPattern("dd MM yyyy" + "\n" + " h:mm a ");

            DateTime dateTime1 = dateTime.plusHours(timeadded);
            String endtimecalc = fmt2.print(dateTime1);
            TextView endtime = (TextView) findViewById(endtimetextView);
            endtime.setVisibility(View.VISIBLE);
            endtime.setText(endtimecalc);

            String timeselected = dayNow + "-" + monthNow + "-" + yearNow + " " + hourNow + ":" + minuteNow;

            DateTime datetimselected = DateTime.parse(timeselected);

            usertimeselection.setText((CharSequence) datetimselected.toDate());

        }
    });

致命异常:主进程: com.almac.tracker,PID: 29114 java.lang.IllegalArgumentException:无效格式:"2017-11-23 T4:56“在java.lang.IllegalArgumentException的”T4:56“中格式错误:945)在org.joda.time.DateTime.parse(DateTime.java:160) at org.joda.time.DateTime.parse(DateTime.java:149)在com.almac.tracker.CreateLine$5.onClick(CreateLine.java:274) at android.view.View.performClick(View.java:6219)android.view.View$PerformClick.run(View.java:24482) at android.os.Handler.handleCallback(Handler.java:769) at androidandroid.app.ActivityThread.main(ActivityThread.java:6540) .os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164)在com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)的java.lang.reflect.Method.invoke(原生方法)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

EN

回答 1

Stack Overflow用户

发布于 2017-11-07 09:29:00

来自DateTime.parse(String str)文档:

从指定的字符串解析DateTime。 它使用ISODateTimeFormat.dateTimeParser()。

日期时间字符串对ISODateTimeFormat无效,它不接受/,但接受-

因此,要么将您的/更改为-并遵守规则:date-opt-time = date-element ['T' [time-element] [offset]] (请参阅日期和时间元素之间的'T'!)因此,日期时间字符串应该如下所示:

代码语言:javascript
复制
String timeselected = yearNow + "-" + monthNow + "-" + dayNow + "'T'" + hourNow + ":" + minuteNow;
DateTime datetimselected = DateTime.parse(timeselected);

或者通过DateTime.parse(String str, DateTimeFormatter formatter)方法使用您自己的格式化程序。

更新1

在运行一些测试之后,'T'实际上不会被默认的解析器所接受。解析器传递的字符串是:

代码语言:javascript
复制
"2017-11-23T04:56"

因此,确保date节"T"字符和time节之间没有空格。

代码语言:javascript
复制
String timeselected = yearNow + "-" + monthNow + "-" + dayNow + "T" + hourNow + ":" + minuteNow;

更新2

为解析器附加测试代码

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        String timeselected = "2017-11-23T04:56";
        DateTime datetimselected = DateTime.parse(timeselected);
        System.out.println(datetimselected.toDate());
    }
}

产出:

代码语言:javascript
复制
Thu Nov 23 04:56:00 EET 2017
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47154122

复制
相关文章

相似问题

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