Car*_*ers 4 java android date date-parsing simpledateformat
我String在数据库(match.getDate)中具有以下日期格式:
01/04/2018
这是我要格式化的日期,存储为日/月/年。我想为我的Android应用设置格式。
我想将日期格式化为:
星期日2018年4月1日
我的代码如下:
SimpleDateFormat fDate = new SimpleDateFormat("dd/MM/yyyy");
try {
textViewDate.setText(fDate.parse(match.getDate()).toString());
} catch (ParseException ex) {
System.out.println(ex.toString());
}
Run Code Online (Sandbox Code Playgroud)
输出:
周日四月08 00:00:00 GMT + 00:00 2018。
我也尝试过"EE, MM d, yyyy",但是它给了我:
java.text.ParseException:无法解析的日期:“ 01/04/2018”
小智 6
其他答案解决了您的问题,但我认为了解一些概念以及为什么您的第一次尝试不起作用很重要。
日期和表示日期的文本之间存在差异。
示例:今天的日期是2018 年 3 月 9 日。该日期只是一个概念,是“我们日历系统中的特定点”的想法。
但是,相同的日期可以用多种格式表示。它可以是“图形化的”,形式是一张纸上的数字周围有许多其他数字以特定顺序排列的圆圈,也可以是纯文本,例如:
请注意,文本表示不同,但它们都表示相同的日期(相同的值)。
考虑到这一点,让我们看看 Java 如何处理这些概念。
String。这个类包含一个字符序列,仅此而已。这些字符可以代表任何东西;在这种情况下,这是一个约会java.util.Date,然后由 表示java.util.Calendar,但这些类充满问题,您应该尽可能避免使用它们。今天我们有一个更好的 API。在 Android 中,您可以使用在java.time您正在使用的 API 级别中可用的类,或者对于低于该级别的 API 级别的三个向后移植(请在此处查看如何使用它)。您将拥有更简单、更可靠的工具来处理日期。
在您的情况下,您有一个String(代表日期的文本)并且您想将其转换为另一种格式。您必须分两步完成:
String为某种日期类型(将文本转换为数字日/月/年值) - 这称为解析为什么您的尝试无效:
Date::toString()method,它以该格式 ( Sun Apr 08 00:00:00 GMT+00:00 2018)生成输出(文本表示)-因此解析正确,但格式不正确EE dd MMM yyyy,您应该用于格式化的模式)来解析日期(导致ParseException)。对于第 1 步,您可以使用 a LocalDate,一种表示日期(日、月和年,没有小时和时区)的类型,因为这就是您的输入:
String input = "01/04/2018";
DateTimeFormatter inputParser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
// parse the input
LocalDate date = LocalDate.parse(input, inputParser);
Run Code Online (Sandbox Code Playgroud)
这比SimpleDateFormat因为它解决了旧 API 的许多奇怪的错误和问题更可靠。
现在我们有了我们的LocalDate对象,我们可以做第 2 步:
// convert to another format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EE dd MMM yyyy", Locale.ENGLISH);
String output = date.format(formatter);
Run Code Online (Sandbox Code Playgroud)
请注意,我使用了一个java.util.Locale. 那是因为你想要的输出有英文的星期几和月份名称,如果你不指定语言环境,它将使用 JVM 的默认值(谁保证它总是英文?最好告诉API 您正在使用哪种语言而不是依赖于默认配置,因为这些可以随时更改,即使是在同一 JVM 中运行的其他应用程序)。
我怎么知道必须在 中使用哪些字母DateTimeFormatter?好吧,我刚刚阅读了javadoc。
小智 5
使用我创建的此日期格式化程序方法
public static String dateFormater(String dateFromJSON, String expectedFormat, String oldFormat) {
SimpleDateFormat dateFormat = new SimpleDateFormat(oldFormat);
Date date = null;
String convertedDate = null;
try {
date = dateFormat.parse(dateFromJSON);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(expectedFormat);
convertedDate = simpleDateFormat.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return convertedDate;
}
Run Code Online (Sandbox Code Playgroud)
并像这样调用此方法
dateFormater(" 01/04/2018" , "EE dd MMM yyyy" , "dd/MM/yyyy")
Run Code Online (Sandbox Code Playgroud)
您将获得所需的输出
| 归档时间: |
|
| 查看次数: |
12974 次 |
| 最近记录: |