gpt4 book ai didi

java - SimpleDateFormat ("EEEE") 返回错误的时区星期几

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

我有以下简单的代码来根据时区获取星期几。

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(details.getTimezone()));
String dayOfWeek = new SimpleDateFormat("EEEE").format(calendar.get(Calendar.DAY_OF_WEEK));

此处,details.getTimezone() 返回可接受的值,例如“Asia/Kolkata”,calendar.get(Calendar.DAY_OF_WEEK) 返回正确的值6.

根据顺序,第 6 天应该返回“星期五”,但此函数返回“星期四”

如果我做错了什么,请告诉我。

另请告知我对 DAY_OF_WEEK = 6 表示星期五的理解是否正确。

最佳答案

java.time

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

使用现代 API java.time 的解决方案:

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
System.out.println(dtf.format(zdt));
}
}

输出:

Friday

了解有关 java.time 的更多信息,modern Date-Time API * 来自 Trail: Date Time

使用旧版 API:

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

public class Main {
public static void main(String[] args) {
Date date = new Date();
DateFormat sdf = new SimpleDateFormat("EEEE", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(sdf.format(date));
}
}

输出:

Friday

* 无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用 ThreeTen-Backport它将大多数 java.time 功能向后移植到 Java 6 和 7。如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

关于java - SimpleDateFormat ("EEEE") 返回错误的时区星期几,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67741539/

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