【问题标题】:Android - change Date Format to dd/mm/yyAndroid - 将日期格式更改为 dd/mm/yy
【发布时间】:2020-04-24 13:52:07
【问题描述】:
Calendar calendar = Calendar.getInstance();
String currentDate = DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());

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

【问题讨论】:

  • 您可以手动获取日期并更改其结构
  • 你用的是哪个安卓版本?
  • 顺便考虑一下扔掉早已过时且臭名昭著的DateFormat类和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API。使用起来感觉好多了。

标签: java android date date-format


【解决方案1】:

你可以使用SimpleDateFormat类:

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

【讨论】:

    【解决方案2】:

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

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

    希望能有所帮助。

    【讨论】:

      【解决方案3】:

      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 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

      要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

      Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

      从哪里获得 java.time 类?

      【讨论】:

        【解决方案4】:

        我正在尝试获取当前日期,但格式为 DD/MM/YY,...

        不要。相信用户最了解他或她的语言环境,并且 Java 中内置的语言环境数据最了解该语言环境的正确日期格式。虽然 2020 年 4 月 24 日可能是您所在地区的一种很好的格式,但在其他地区的设备上,可能会首选不同的格式。

        使用 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 是一个出了名的麻烦类,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,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
        • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

        链接

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-19
          • 1970-01-01
          • 1970-01-01
          • 2016-09-23
          • 1970-01-01
          • 1970-01-01
          • 2021-01-19
          相关资源
          最近更新 更多