Android 编辑文本中的日期
我试图在Android中从edittext获取日期,但代码返回错误的文本 Java代码:Android 编辑文本中的日期,android,date,datetime,time,android-edittext,Android,Date,Datetime,Time,Android Edittext,我试图在Android中从edittext获取日期,但代码返回错误的文本 Java代码: SimpleDateFormat df = new SimpleDateFormat("dd-MM-YYYY"); java.util.Date myDate; myDate = df.parse(editText1.getText().toString()); String myText = myDate.getDay() + "-" + myDate.getMonth() + "-" + myDate
SimpleDateFormat df = new SimpleDateFormat("dd-MM-YYYY");
java.util.Date myDate;
myDate = df.parse(editText1.getText().toString());
String myText = myDate.getDay() + "-" + myDate.getMonth() + "-" + myDate.getYear() + "abcd";
XML代码:
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="date">
当我在EditText中写入文本“23-08-2013”时,代码返回“5-7-113-abcd”。怎么了?如何从EditText获取正确的日期?getDay()
返回星期几,因此这是错误的。使用getDate()
getMonth()
从零开始,因此需要向其中添加1
getYear()
返回一个值,该值是从年份中减去1900的结果,因此需要将1900加到该值中
abcd
-好吧,您要明确地将其添加到字符串的末尾,这样就不会有什么意外了:)
不过,所有这些都不推荐使用,您应该真正使用日历
编辑:日历的快速示例
Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.get(Calendar.DAY_OF_MONTH); // and so on
请不要害怕看Java文档。这些方法已被弃用。(顺便说一句,您使用了错误的方法获取值)
使用日历:
Calendar c = Calendar.getInstance();
c.setTime(myDate)
String dayOfMonth = c.get(Calendar.DAY_OF_MONTH);
String month = c.get(Calendar.MONTH);
String year = c.get(Calendar.YEAR);
Android文档始终是最好的参考。
以下是日历文档页面的链接:
java.time通过去糖化或ThreeTenABP
<>我建议您考虑JavaTime,现代java日期和时间API,用于日期工作。< /P>
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String textFromEditText = "23-08-2013";
LocalDate myDate = LocalDate.parse(textFromEditText, dateFormatter);
String myText = myDate.format(dateFormatter);
System.out.println("Formatted again: " + myText);
输出为:
再次格式化:23-08-2013
正如您使用格式化程序将字符串解析为LocalDate
,在格式化时也使用格式化程序,从LocalDate
到string
。如果您想再次使用相同的格式,只需再次使用相同的格式化程序
你的代码出了什么问题?
Date
类的设计很差,常常令人困惑。Ken Wolf的答案是正确的,因为自Java 1.1(1997年2月)以来,这些方法的混乱行为一直被弃用
代码中还有一个问题,即在格式模式字符串中使用大写字母yyy
。大写字母YYYY
表示基于周的年份,仅对周数有用。小写字母yyyy
表示纪年。事实上,由于这个错误,我从你的代码中得到了1-11-112abcd
,这比你报告的结果还差。这三个数字都不正确
问:java.time不需要Android API级别26吗?
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
org.threeten.bp
导入日期和时间类
链接
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口
到Java6和Java7(JSR-310为三十)
谢谢:)我如何使用Calenda来完成?我试图从Calendar实例中获取日期,但Results是错误的。我不确定您要做什么,因为在您的示例中,您转换为日期似乎只是为了转换回完全相同的字符串。使用日历进行涉及日期的计算。无论如何,希望这能有所帮助。虽然这可以从理论上回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。你不能直接构建日历。改为使用Calendar.getInstance()。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String textFromEditText = "23-08-2013";
LocalDate myDate = LocalDate.parse(textFromEditText, dateFormatter);
String myText = myDate.format(dateFormatter);
System.out.println("Formatted again: " + myText);