gpt4 book ai didi

java - 在 Kotlin Android Studio 中以整数形式获取一年中的日期

转载 作者:行者123 更新时间:2023-12-04 23:54:02 24 4
gpt4 key购买 nike

我试图将一年中的当前日期作为整数在我的程序中访问。我查看了 Kotlin Docs 并找到了一个名为 getDay() 的函数,但是当我将它输入到我的程序中时,它给了我一个错误并说该函数未定义。我正在使用带有 Kotlin 的 Android Studio,最低 API 为 21。

IDE code Error

最佳答案

java.time

java.util 日期时间 API 及其格式化 API,SimpleDateFormat 已过时且容易出错。建议完全停止使用并切换到modern Date-Time API *.

使用现代日期时间 API java.time 的解决方案:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
// Note: If you want to work with a specific timezone, use LocalDate.now(ZoneId)
// e.g. LocalDate.now(ZoneId.of("Australia/Brisbane")) or
// LocalDate.now(ZoneOffset.UTC) etc.
LocalDate today = LocalDate.now();

int doy = today.getDayOfYear();
System.out.println(doy);

// Using DateTimeFormatter (not recommended for production code)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("D", Locale.ENGLISH);
String strDoy = today.format(dtf);
System.out.println(strDoy);
}
}

在我的时区输出,欧洲/伦敦:

289
289

ONLINE DEMO

Trail: Date Time 了解有关现代日期时间 API 的更多信息

出于任何原因,如果您想使用旧版 API:

java.util.Date 对象仅表示时间轴上的一个瞬间 — 自 UNIX 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的毫秒数的包装。由于它不保存任何时区信息,它的 toString 函数应用 JVM 的时区返回一个 String,格式为 EEE MMM dd HH:mm:ss zzz yyyy,派生自 毫秒值。要以不同的格式和时区获取 java.util.Date 对象的 String 表示,您需要使用具有所需格式的 SimpleDateFormat以及适用的时区,例如

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);

sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String strDateNewYork = sdf.format(date);

sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String strDateUtc = sdf.format(date);

让我们看看为什么知道上述事实很重要:

函数,Calendar#getInstance返回基于默认时区中当前时间的日历,默认为 FORMAT语言环境。如果您想从中找到一些其他时区的信息,您有两种选择:

  1. 更改默认时区,例如TimeZone.setDefault(TimeZone.getTimeZone("Australia/Brisbane")).但是,这可能会导致应用程序的其他部分行为不正确。因此,强烈建议不要使用此选项
  2. 使用上面显示的所需时区设置的 SimpleDateFormat 格式化 java.util.Date(您可以通过 Calendar#getTime 获得)。

演示:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Main {
public static void main(String[] args) {
Date now = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("D");

// For the JVM's timezone
sdf.setTimeZone(TimeZone.getDefault());
System.out.println(sdf.format(now));

// For the timezone, UTC
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(now));

// For the timezone, Australia/Brisbane
sdf.setTimeZone(TimeZone.getTimeZone("Australia/Brisbane"));
System.out.println(sdf.format(now));

System.out.println();
}
}

发布此答案时我所在时区欧洲/伦敦的输出:

289
289
290

ONLINE DEMO


* 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring .请注意,Android 8.0 Oreo 已经提供了support for java.time .

关于java - 在 Kotlin Android Studio 中以整数形式获取一年中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69591283/

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