Java Android Calendar/DateFormat 这种格式 XXXXXXXXX [关闭]

Posted

技术标签:

【中文标题】Java Android Calendar/DateFormat 这种格式 XXXXXXXXX [关闭]【英文标题】:Java Android Calendar/DateFormat this format XXXXXXXX [closed] 【发布时间】:2019-08-17 21:13:13 【问题描述】:

我真的用过这个

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

结果 = 2019 年 3 月 27 日,星期三

我需要这个:27032019 没有 , / 或 . 仅限XXXXXXXX

谢谢你

【问题讨论】:

研究 SimpleDateFormat。但我认为这应该可行: SimpleDateFormat format = new SimpleDateFormat("ddMMyyy") 尝试使用新的 java 8 time api 的 LocalDate。日期现已过时。 顺便考虑扔掉长期过时且臭名昭著的麻烦DateFormat和朋友,并将ThreeTenABP添加到您的android项目中,以便使用java.time,现代Java日期和时间API .与它一起工作要好得多。 LocalDate.now(yourTimeZone).format(DateTimeFormatter.ofPattern("ddMMuuuu")). 您需要27032019 做什么?它不易被人类阅读,不推荐用于序列化(后者使用ISO 8601 格式:2019-03-27)。 【参考方案1】:

这是现代答案和一些额外的想法。

在大多数情况下,您不应该希望您的日期格式为27032019。它不易被人类阅读,不推荐用于序列化。

同时考虑不使用CalendarDateFormatSimpleDateFormatDate。这些课程早已过时且设计不佳。相反,您可以使用 java.time,这是现代 Java 日期和时间 API。使用起来感觉好多了。

使用 java.time 和 ThreeTenABP 进行序列化

如果您需要您的日期字符串是机器可读的——例如,如果它用于 JSON 或存储到文本文件中,您或其他人需要从中读取它——请使用标准 ISO 8601 格式。 LocalDate.toString 产生这种格式,所以我们不需要任何显式格式化程序:

    final String currentDate
            = LocalDate.now(ZoneId.of("Africa/Khartoum")).toString();
    System.out.println(currentDate);

今天运行时的输出是:

2019-03-27

更紧凑的 ISO 8601 格式

如果您坚持不带任何标点符号的紧凑格式,ISO 8601 也提供:

    final String currentDate = LocalDate.now(ZoneId.of("Africa/Khartoum"))
            .format(DateTimeFormatter.BASIC_ISO_DATE);

20190327

你的格式

如果你真的坚持(我不明白你为什么要这样做),java.time 当然也可以产生你要求的格式:

    final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("ddMMuuuu");
    final String currentDate = LocalDate.now(ZoneId.of("Africa/Khartoum"))
            .format(dateFormatter);

27032019

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6

在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,现代 API 是内置的。 在 Java 6 和 7 中获得 ThreeTen Backport,这是现代类的后向端口(JSR 310 的 ThreeTen;请参阅底部的链接)。

在(旧版)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。我对上述 sn-ps 的导入是:

import org.threeten.bp.LocalDate;
import org.threeten.bp.ZoneId;
import org.threeten.bp.format.DateTimeFormatter;

链接

Oracle tutorial: Date Time 解释如何使用 java.time。 Java Specification Request (JSR) 310,其中首次描述了 java.time。 ThreeTen Backport project,java.time 向后移植到 Java 6 和 7(JSR-310 的 ThreeTen)。 ThreeTenABP,Android 版 ThreeTen Backport Question: How to use ThreeTenABP in Android Project,解释得很透彻。 Wikipedia article: ISO 8601

【讨论】:

【参考方案2】:

使用SimpleDateFormat:

Calendar date = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("ddMMyyyy");
System.out.println("Date : " + format.format(date.getTime()));;

【讨论】:

【参考方案3】:

那么你可以做的是使用短格式并去掉不必要的部分

final String currentDate = 
DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());
currentDate= currentDate.replace("/"", "");

【讨论】:

在 en-US 语言环境中,这给出了 32719。它可能适用于某些语言环境,但结果因语言环境而异。【参考方案4】:

试试这个:

    Calendar calendar = Calendar.getInstance();
    Date date = calendar.getTime();
    DateFormat dateFormat = new SimpleDateFormat("ddMMyyyy");
    System.out.println(dateFormat.format(date));

【讨论】:

以上是关于Java Android Calendar/DateFormat 这种格式 XXXXXXXXX [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Android:android如何支持java? [关闭]

Android逆向-Android基础逆向(2-2)

Android面试题Java虚拟机

Android面试题Java基础

java判断设备是android还是ios

android Studio的java类变为蓝j怎么办