Java 在日历年中显示星期几
日历年中的一周由5个工作日组成:星期一,星期二,星期三,星期四和星期五;剩下的两天(星期六和星期天)组成了周末。如果作为应用程序开发人员使用日期和日历,手动查找一年中星期几的名称可能会很繁琐。在本文中,我们将深入探讨使用内置类和API的各种方法,为初学者和有经验的Java开发人员提供详细的代码示例,为简化与日历相关的任务提供有价值的技巧,即使用Java编程语言来显示日历年中星期几的名称。以下是显示星期几名称的不同方法类型:
- 天真的方法
-
使用java.text.DateFormatSymbols类
-
使用java.util.Calendar类
-
使用java.time.format.DateTimeFormatter类
-
使用java.util.Date和java.text.SimpleDateFormat类
方法1:原生的方法
这是最简单的方法,需要将每个星期几的名称硬编码到数组中。然后,我们使用for-each循环遍历该数组并显示它们的名称。
示例
public class Weekdays {
public static void main(String[] args) {
String[] weekdays = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
for (String day : weekdays) {
System.out.println(day);
}
}
}
输出
Monday
Tuesday
Wednesday
Thursday
Friday
方法2:使用java.text.DateFormatSymbols类
Java标准库的java.text包中包含java.text类,该类提供了一组由SimpleDateFormat用于根据已建立的模式格式化和解析日期和时间的符号。DateFormatSymbols类提供了检索和设置以下日期和时间符号的方法:
- 月份和日期名称及其缩写
-
星期几的名称和缩写
-
纪元名称
-
上午/下午的字符串
-
时区名称和缩写
DateFormatSymbols默认使用当前默认区域设置的特定区域设置符号。然而,您可以创建一个带有不同区域设置或自定义符号数组的DateFormatSymbols实例来处理上述任意字段。我们将使用getWeekdays()函数,它返回一个星期几名称的数组。
示例
import java.text.DateFormatSymbols;
public class Weekdays {
public static void main(String[] args) {
DateFormatSymbols symbols = new DateFormatSymbols();
String[] weekdays = symbols.getWeekdays();
for (int i = 2; i <= 6; i++) {
System.out.println(weekdays[i]);
}
}
}
输出
Monday
Tuesday
Wednesday
Thursday
Friday
方法3:使用java.util.Calendar类
Java标准库的java.util包包含了java.util类,它提供了一种直观的、与地域无关的处理日期和时间的方式。
Calendar是一个直观的系统,它可以以各种方式进行日期和时间操作。它提供了检索或设置日期或时间的各个字段的方法,比如年、月、日、小时、分钟、秒和毫秒;此外,它还允许对这些值进行加减操作
Calendar是一个抽象类,因此不能直接创建实例。而是使用getInstance()静态工厂方法来创建一个基于当前时区和语言环境设置的实例。或者,使用getInstance(TimeZone zone, Locale aLocale)方法来创建一个具有特定偏好的Calendar实例。
Calendar提供了一些有用的功能,比如时区支持、闰年支持以及字段归一化。
示例
import java.util.Calendar;
import java.util.Locale;
public class Weekdays {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
for (int i = Calendar.MONDAY; i <= Calendar.FRIDAY; i++) {
calendar.set(Calendar.DAY_OF_WEEK, i);
String name = calendar.getDisplayName(
Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
System.out.println(name);
}
}
}
输出
Monday
Tuesday
Wednesday
Thursday
Friday
方法4:使用java.time.format.DateTimeFormatter类
Java 8的日期时间API,特别是java.time包,包括一个DateTimeFormatter类,提供灵活且线程安全的日期/时间格式化能力。
DateTimeFormatter是用于格式化和解析日期和时间对象的应用程序。它提供了各种选项,可以基于日期、时间或两者来创建格式化器。此外,它支持多个纪年体系,包括ISO日历体系和非ISO日历体系。
DateTimeFormatter可以将本地化文本(如月份和日期名称)解析和格式化为表示日期或时间对象内不同字段的模式字母。它支持在这些相同的模式字母中的特定字段,如年、月、日、时、分、秒(包括其分数)。
DateTimeFormatter既是线程安全的又是不可变的,允许您在多个线程中重用相同的格式化器实例。
示例
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class Weekdays {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.getDefault());
int c=0;
for (DayOfWeek day : DayOfWeek.values()) {
if(c<5)
{
String name = day.getDisplayName(TextStyle.FULL, Locale.getDefault());
System.out.println(name);
c++;
}
}
}
}
输出
Monday
Tuesday
Wednesday
Thursday
Friday
方法5:使用java.util.Date和java.text.SimpleDateFormat类
Java标准库提供了两个用于处理日期和时间的类:java.util.Date和java.text.SimpleDateFormat。
java.util.Date提供了以毫秒精度表示精确时间的能力,相对于“纪元”- 1970年1月1日00:00:00 GMT。Date提供了操作日期和时间值的方法,如获取或设置年、月、日、小时、分钟、秒等值;然而,它已经在Java 8中被引入的java.time包所取代。
java.text.SimpleDateFormat是一个根据预定模式格式化和解析日期和时间的类。它接受一个输入字符串,指定日期应该如何格式化或解析;这个格式字符串由表示日期或时间值中的字段的各种模式字母组成,如年、月、日、小时、分钟、秒和秒的一部分。
SimpleDateFormat不是线程安全的,在多线程环境中不鼓励使用。取而代之的是,应当使用java.time.format.DateTimeFormatter类来进行日期和时间的格式化和解析。
示例
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Weekdays {
public static void main(String[] args) {
SimpleDateFormat simpleDF = new SimpleDateFormat("EEEE", Locale.getDefault());
for (int i = 6; i <= 10; i++) {
Date date = new Date();
date.setDate(i);
String name = simpleDF.format(date);
System.out.println(name);
}
}
}
输出
Thursday
Friday
Saturday
Sunday
Monday
结论
Java提供了广泛的库,可以轻松地显示一个日历年中周一到周五的工作日。上面展示了六种技术,如果需要在同一年份内显示周末日,只需要最小的修改。