Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Android 编辑文本中的日期_Android_Date_Datetime_Time_Android Edittext - Fatal编程技术网

Android 编辑文本中的日期

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

我试图在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.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为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

  • 谢谢:)我如何使用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);