java中如何判断两个日期是否是同一周

package com.iss.itreasury.ebank.system.util;

import java.text.*;
import java.util.*;

/**
 * java中如何判断两个日期是否是同一周
 * @author Administrator
 * java中的Calendar是比较强的。
 * “2004-12-25”是星期六,也就是说它是2004年中第52周的星期六,
 * 那么“2004-12-26”到底是2004年的第几周哪,java中经测试取得的它的Week值是1,
 * 那么也就是说它被看作2005年的第一周了,这个处理是比较好的。
 * 可以用来判断“2004-12-26”和“2005-1-1”是同一周。
 */
public class IsWeekSame {
 
 public static boolean isSameDate(String date1, String date2)
 {
  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  Date d1 = null;
  Date d2 = null;
  try
  {
   d1 = format.parse(date1);
   d2 = format.parse(date2);
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  Calendar cal1 = Calendar.getInstance();
  Calendar cal2 = Calendar.getInstance();
  cal1.setFirstDayOfWeek(Calendar.MONDAY);//西方周日为一周的第一天,咱得将周一设为一周第一天
  cal2.setFirstDayOfWeek(Calendar.MONDAY);
  cal1.setTime(d1);
  cal2.setTime(d2);
  int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
  if (subYear == 0)// subYear==0,说明是同一年
  {
   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
  }
  else if (subYear == 1 && cal2.get(Calendar.MONTH) == 11) //subYear==1,说明cal比cal2大一年;java的一月用"0"标识,那么12月用"11"
  {
   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
  }
  else if (subYear == -1 && cal1.get(Calendar.MONTH) == 11)//subYear==-1,说明cal比cal2小一年
  {
   if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
  }
  return false;
 }

 
 public static void main(String[] args)
 {
  boolean a = isSameDate("2016-12-25", "2017-1-1");
  if (a) {
   System.out.println("是同一周!");
  } else {
   System.out.println("不是同一周!");
  }
 }

}

 

出处:http://blog.sina.com.cn/s/blog_a4a5c43701017d57.html,稍微改动过。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断两个日期是否在同一周,可以根据ISO8601标准来计算。该标准定义了一周的第一天为周一,最后一天为周日,一年的第一个完整周必须满足以下条件: 1. 它的第一天必须是该年的第一天或者该年的第一个周一 2. 它包含的天数必须大于等于4天 以此类推,每个周的起始日期为该周的周一,终止日期为该周的周日。因此,我们可以按照以下步骤判断两个日期是否在同一周内: 1. 计算两个日期是当年的第几天(dayOfYear) 2. 计算出两个日期所在周的周一的日期(monday1, monday2),公式为: monday = date - (date.getDayOfWeek() - 1) 3. 判断两个日期所在周的周一是否相同,如果不同,则它们不在同一周 4. 如果两个日期所在周的周一相同,则判断它们距离周一的天数是否都小于7天,如果都小于7天,则它们在同一周,否则它们不在同一周。 以下是Java实现的代码示例: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class DateUtils { public static boolean isSameWeek(LocalDate date1, LocalDate date2) { // 计算两个日期是当年的第几天 int dayOfYear1 = date1.getDayOfYear(); int dayOfYear2 = date2.getDayOfYear(); // 计算出两个日期所在周的周一 LocalDate monday1 = date1.minusDays(date1.getDayOfWeek().getValue() - 1); LocalDate monday2 = date2.minusDays(date2.getDayOfWeek().getValue() - 1); // 判断两个日期所在周的周一是否相同 if (!monday1.equals(monday2)) { return false; } // 判断两个日期距离周一的天数是否都小于7天 return Math.abs(dayOfYear1 - monday1.getDayOfYear()) < 7 && Math.abs(dayOfYear2 - monday2.getDayOfYear()) < 7; } } ``` 其,date1和date2为两个LocalDate对象,返回值为布尔类型,表示它们是否在同一周内。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值