Android - 将日期格式更改为 dd/mm/yy

Android - change Date Format to dd/mm/yy

Calendar calendar = Calendar.getInstance();
String currentDate = DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());

我正在尝试获取当前日期,但格式为 DD/MM/YY,但它给了我 MM/DD/YY 关于如何修复它有什么建议吗?

您可以使用 SimpleDateFormat class:

Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
String currentDate = sdf.format(calendar.getTime());

我假设您想反转日期格式。

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse(dateString);

SimpleDateFormat fmtOut = new SimpleDateFormat("dd-MM-yyyy");
return fmtOut.format(date);

希望对大家有所帮助。

tl;博士

现代方法使用 java.time 类.

LocalDate
.now
(
    ZoneId.of( "Africa/Casablanca" )
)
.format
(
    DateTimeFormatter.ofPattern( "dd/MM/uu" )
)

避免遗留日期时间类

您正在使用糟糕的日期时间 类,几年前被 JSR 310 中定义的现代 java.time 类 所取代。

java.time

对于只有日期的值,没有时间和时区,使用 LocalDate

需要一个时区来确定当前日期。对于任何给定的时刻,日期在日本可能是“明天”,而在墨西哥仍然是“昨天”。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate ld = LocalDate.now( z ) ;

使用标准 ISO 8601 格式的文本生成字符串。

String output = ld.toString() ;

生成包含自定义格式文本的字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uu" ) ;
String output = ld.format( f ) ;

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

Joda-Time project, now in maintenance mode, advises migration to the java.time 类.

您可以直接与数据库交换 java.time 对象。使用 JDBC driver compliant with JDBC 4.2 或更高版本。不需要字符串,不需要 java.sql.* 类。 Hibernate 5 和 JPA 2.2 支持 java.time

在哪里获取java.time类?

I'm trying to get the current date but in a format of DD/MM/YY, …

不要。相信用户最了解他或她的语言环境,并且 Java 中内置的语言环境数据最了解该语言环境的正确日期格式。虽然 24/04/20 可能是适合您的区域设置的格式,但在其他区域设置的设备上可能首选不同的格式。

使用 java.time,现代 Java 日期和时间 API:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
    LocalDate d = LocalDate.now(ZoneId.systemDefault());
    System.out.println(d.format(dateFormatter));

顺便说一句,在许多语言环境中,包括意第绪语、加勒根语、印度尼西亚语、乌兹别克语、塔吉克语、索马里语、马来语、意大利语和新西兰英语,输出将如您所愿:

24/04/20

我确实建议您使用 java.time 进行约会工作。 DateFormat 是出了名的麻烦 class,而且 Calendar 的设计也很糟糕。两者都已经过时了。 java.time 更易于使用。

问题:java.time 不需要 Android API 26 级吗?

java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置了现代 API。
  • 在非Android Java 6 和 7 中获取 ThreeTen Backport,现代 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接) .
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

链接