问题描述
我试图从包含简单格式(“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
从 Trail: Date Time 了解有关现代 Date-Time API 的更多信息。