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
。它不易被人类阅读,不推荐用于序列化。
同时考虑不使用Calendar
、DateFormat
、SimpleDateFormat
或Date
。这些课程早已过时且设计不佳。相反,您可以使用 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章