判断某一日期是星期几。

public static String getStringDayOfWeek(Date date) {
String result = "";
if (null != date) {
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
result = formatter4.format(date);
}
return result;
}
Java 中,有多种方法可以判断日期中的第周,以下为种常见的实现方式: ### 使用 `Calendar` 类 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekByDate { public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time = "2022-01-06"; Date parse = simpleDateFormat.parse(time); Calendar calendar = Calendar.getInstance(); // 设置星期周开始的第天 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 设置在中第星期所需最少天数 calendar.setMinimalDaysInFirstWeek(0); calendar.setTime(parse); int week = calendar.get(Calendar.WEEK_OF_YEAR); System.out.println(week); } } ``` 在上述代码里,借助 `Calendar` 类来判断指定日期中的第周。首先,把日期字符串转换为 `Date` 对象,接着对 `Calendar` 的属性进行设置,最后调用 `get(Calendar.WEEK_OF_YEAR)` 方法获取周数。不过要留意,美国是以周日作为每周的第天,若要以周作为每周的第天,需要对 `setFirstDayOfWeek` 方法进行设置 [^1][^3]。 ### 使用 `LocalDate` 和 `WeekFields` ```java import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.Locale; public class WeekOfYearExample { public static void main(String[] args) { // 获取当前日期 LocalDate today = LocalDate.now(); // 使用 ISO 标准周定义获取周数(周周的第天,第周至少有 4 天) int weekNumber = today.get(WeekFields.ISO.weekOfYear()); // 或者使用特定地区的周定义(例如美国,周日为周的第天) // int weekNumber = today.get(WeekFields.of(Locale.US).weekOfYear()); System.out.println("当前日期: " + today); System.out.println("今天是这的第 " + weekNumber + " 周"); } } ``` 这段代码利用 `LocalDate` 和 `WeekFields` 来获取当前日期中的第周。`WeekFields.ISO.weekOfYear()` 按照 ISO 8601 标准获取周数,该标准里周周的第天,第周是包含当至少 4 天的第星期;也能够使用 `WeekFields.of(Locale.US)` 等地区特定的周定义 [^2]。 ### 使用 `Calendar` 类处理特殊情况 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekByDateWithSpecialCase { public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String time = "2022-01-06"; Date parse = simpleDateFormat.parse(time); Calendar calendar = Calendar.getInstance(); // 设置星期周开始的第天 calendar.setFirstDayOfWeek(Calendar.MONDAY); // 设置在中第星期所需最少天数 calendar.setMinimalDaysInFirstWeek(0); calendar.setTime(parse); int week = calendar.get(Calendar.WEEK_OF_YEAR); System.out.println(week); if (week == 1 && parse.getMonth() == 11) { calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 7); Date pastDate = calendar.getTime(); String result = simpleDateFormat.format(pastDate); System.out.println(result); week = calendar.get(Calendar.WEEK_OF_YEAR) + 1; System.out.println(week); } } } ``` 此代码同样使用 `Calendar` 类,并且处理了些特殊情况,像 12 月最后周被计算到下的情况 [^3]。 ### 封装为函数 ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class WeekUtils { /** * 转化指定日期,哪周 * @param dateStr * @return */ public static String getWeeksInMonthOfDate(String dateStr) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setMinimalDaysInFirstWeek(4); calendar.setTime(dateFormat.parse(dateStr)); int weekOfYear = calendar.get(Calendar.YEAR); int weekNo = calendar.get(Calendar.WEEK_OF_YEAR); // Calendar 获取月份需要 +1 int nowMonth = calendar.get(Calendar.MONTH) + 1; // 正常 12 月份肯定都是大月份的周数如 53 52 51 50 49 如果周数是 1 而月份是 12,则表示日期被计算在了下 份需要 +1 if (weekNo == 1 && nowMonth == 12) { weekOfYear = weekOfYear + 1; } // 1 月份肯定都是小周数如 1,2,3,4,5 如果周数是 52 或者 53 而月份是 1 则表示日期被计算在了上份需要 -1 if ((weekNo == 53 || weekNo == 52) && nowMonth == 1) { weekOfYear = weekOfYear - 1; } return weekOfYear + "" + "第" + weekNo + "周"; } public static void main(String[] args) throws ParseException { String dateStr = "2022-01-06"; System.out.println(getWeeksInMonthOfDate(dateStr)); } } ``` 该代码把获取指定日期中第周的逻辑封装成了函数,并且处理了些边界情况,例如 12 月最后周和 1 月第周的计算问题 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值