在java中使用简单的日期格式从字符串数据中获取星期几

问题描述

我试图从包含简单格式(“yyyy-MM-dd”)的日期字符串的数组列表中获取星期几。例如,我有 arraylist = {"2021-04-01","2021-05-03","2020-06-17"}。是否可以确定每个日期属于一周中的哪一天?所以对于“2021-04-01”的第一个字符串,我想把它变成“星期四”。

感谢您的帮助!

解决方法

您的日期字符串符合 ISO 8601 标准。现代日期时间 API 基于 ISO 8601,只要日期时间字符串符合 ISO 8601 标准,就不需要明确使用 DateTimeFormatter 对象。

简单地使用 LocalDate#parse 解析字符串并使用 LocalDate#getDayOfWeek 获取星期几,例如

System.out.println(
    LocalDate.parse("2021-04-01")
             .getDayOfWeek()
             .getDisplayName(TextStyle.FULL,Locale.ENGLISH)
);

更多样式的演示:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream.of(
                "2021-04-01","2021-05-03","2020-06-17"
        ).forEach(s -> 
            System.out.printf(
                "%s,%s,%s%n",LocalDate.parse(s).getDayOfWeek(),LocalDate.parse(s).getDayOfWeek().getDisplayName(TextStyle.FULL,Locale.ENGLISH),LocalDate.parse(s).getDayOfWeek().getDisplayName(TextStyle.SHORT,Locale.ENGLISH)
            )
        );
        
        System.out.println("+-+-+-+-+-+-+-+-+-+-+-+-+");
        
        // Non-Stream solution:
        // Also,showing only one style without using String#format i.e. %s
        List<String> strDateList = Arrays.asList(
                                        "2021-04-01","2020-06-17"
                                    );
        
        for(String s: strDateList) {
            LocalDate date = LocalDate.parse(s);
            DayOfWeek dow = date.getDayOfWeek();
            System.out.println(dow.getDisplayName(TextStyle.FULL,Locale.ENGLISH));
        }
    }
}

输出:

THURSDAY,Thursday,Thu
MONDAY,Monday,Mon
WEDNESDAY,Wednesday,Wed
+-+-+-+-+-+-+-+-+-+-+-+-+
Thursday
Monday
Wednesday

ONLINE DEMO

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。