繁体   English   中英

为什么 new java.text.SimpleDateFormat("EEEE").format(new java.util.Date(2015, 6, 9)) 返回错误的星期几?

[英]Why does new java.text.SimpleDateFormat("EEEE").format(new java.util.Date(2015, 6, 9)) return the wrong day of the week?

我想从Javadate获取星期几。 为什么这会在Friday when返回,而实际上是Tuesday

new java.text.SimpleDateFormat("EEEE").format(new java.util.Date(2015, 6, 9))

PS 我知道java.util.Date(int year, int month, int day)已被弃用,也许这与它有关。

该已弃用的构造函数中的month参数从1月的0开始,因此new Date(115, 5, 9)如果您要谈论6月9日( 115是因为year参数是“从1900开始”) new Date(115, 5, 9)可能需要new Date(115, 5, 9) )。

文档中

参数:

year -年减去1900。

month - 0-11之间的月份。

date -1到31之间的月份。

(我的重点。)

您已经说过要单线执行此操作。 在Java 8中,您可以执行以下操作:

String day = LocalDate.of(2015, 6, 9).format(DateTimeFormatter.ofPattern("EEEE"));

使用java.time.LocalDatejava.time.format.DateTimeFormatter

时间

遗留的日期时间 API( java.util日期时间类型及其格式化 API, SimpleDateFormat )已经过时且容易出错。 建议完全停止使用它并切换到java.time现代日期时间 API *

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

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

public class Main {
    public static void main(String args[]) {
        System.out.println(DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH).format(LocalDate.of(2015, 6, 9)));

        // Alternatively
        System.out.println(LocalDate.of(2015, 6, 9).getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH));
    }
}

输出:

Tuesday
Tuesday

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


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和您的 Android API 工作级别仍然不符合 Java-8,请检查 通过 desugaringHow to use ThreeTenABP in Android Project 可用的 Java 8+ APIs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM