gpt4 book ai didi

android - Kotlin-如何从日历中获取日期为 "dd"和月份为 "mm"?

转载 作者:行者123 更新时间:2023-12-05 00:15:36 24 4
gpt4 key购买 nike

我有一个变量日期,它是一个字符串,需要采用这种格式“yyyy-mm-dd”,我从 CALENDAR 类型的变量中获取数据,所以当月份或日期小于 10 时,它只返回数字“d”或“m”。
这是我现在正在做的代码,它不是那么好。有一个更好的方法吗?

val date: String
if(cal.get(Calendar.MONTH)<9) {
date = cal.get(Calendar.YEAR).toString() + "-0" +
(cal.get(Calendar.MONTH) + 1).toString() + "-" + cal.get(Calendar.DAY_OF_MONTH).toString()
}
else {date = cal.get(Calendar.YEAR).toString() + "-"
+ (cal.get(Calendar.MONTH) + 1).toString() + "-" + cal.get(Calendar.DAY_OF_MONTH).toString()}
谢谢

最佳答案

java.time 通过脱糖
考虑使用现代 Java 日期和时间 API java.time 进行日期格式化工作。在 Java 中,我可以这样写:

    LocalDate someDate = LocalDate.of(2021, Month.FEBRUARY, 6);
String dateString = someDate.toString();
System.out.println(dateString);
输出:

2021-02-06


您整理的格式符合 ISO 8601 标准(链接在底部),您可以从 toString 获取 LocalDate的方法.会不会更容易?

What is the difference between the variable type LocalDate and Calendar?


旧的 Calendar 之间有很多不同之处和现代 LocalDate类(class)。我几乎很难想到任何相似之处。以下列表并不详尽,但一些重要的区别是:
  • Calendar class 试图成为每个日期和时间目的的一切,这使得设计变得庞大而复杂。一个 LocalDate仅适用于 ISO 或(预测)公历中的日期,因此简单明了。
  • 一个 Calendar表示具有周编号方案等的时区中的日期和时间.正如我所说,一个 LocalDate代表一个日期,所以它没有时间和时区。如果您需要其中任何一个,还有其他好的 java.time 类供您使用。
  • 一个 Calendar是可变的并且不是线程安全的。一个 LocalDate是不可变的,因此在设计上是线程安全的。
  • Calendar是用于不同日历系统的类的抽象父类(super class):例如儒略/格里高利和泰国佛教。所以当你知道你有一个 Calendar对象,你不知道它属于哪个日历系统。 LocalDate是一个final类,它不能有任何子类,它总是属于proleptic Gregorian calendar(java.time还提供了其他日历系统中的日期类)。
  • Calendar具有老式设计,非常通用getset方法。你会经常看到有人调用 set连续 3 或 7 次对对象进行一些修改。 LocalDate专为流畅的 API 设计,您可以在其中执行 myLocalDate.with(Month.APRIL).withDayOfMonth(30) 之类的操作在一个声明中,一旦习惯了这种风格,大多数人就会觉得很容易阅读。
  • 来自 Calendar.toString 的输出几乎不可读。要格式化它的值,您最初应该提取 Date从中提取并使用 SimpleDateFormat 对其进行格式化(一个更麻烦的类),并获得 Calendar 的值通过您需要记住设置TimeZone可能还有 SimpleDateFormat 的其他属性根据Calendar . LocalDate.toString如我们所见,以 ISO 8601 格式输出。

  • 问:java.time 不需要 Android API 26 级吗?
    java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6 .
  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上,要么使用脱糖,要么使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保从 org.threeten.bp 导入日期和时间类。与子包。

  • 链接
  • Oracle tutorial: Date Time解释如何使用 java.time。
  • Java Specification Request (JSR) 310 , 其中 java.time最早被描述。
  • ThreeTen Backport projectjava.time 的后向端口到 Java 6 和 7(JSR-310 的 ThreeTen)。
  • Java 8+ APIs available through desugaring
  • ThreeTenABP , ThreeTen Backport Android 版
  • Question: How to use ThreeTenABP in Android Project , 解释得很透彻。
  • Wikipedia article: ISO 8601
  • 关于android - Kotlin-如何从日历中获取日期为 "dd"和月份为 "mm"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65947143/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com