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

java中如何判断两个日期是否是同一周
java中的Calendar是比较强的,今天经过测试确实如此。

大家查一下自己的日历“2004-12-25”是星期六,也就是说它是2004年中第52周的星期六,

那么“2004-12-26”到底是2004年的第几周哪,java中我测试取得的它的Week值是1,

那么也就是说它被看作2005年的第一周了,这个处理是比较好的。

可以用来判断“2004-12-26”和“2005-1-1”是同一周。

下面贴出代码,实现判断两个日期是否是同一周。

 

import java.text.*;
import java.util.*;
public class isWeekSame
{
 //------------------------------
 //类名称:isWeekSame
 //包含方法:1.isSameDate
 //    2.main
 //作者:lzueclipse
 //时间:2005-11-13
 //------------------------------

 //----------------------------
 //方法名称:isSameDate(String date1,String date2)
 //功能描述:判断date1和date2是否在同一周
 //输入参数:date1,date2
 //输出参数:
 //返 回 值:false 或 true
 //其它说明:主要用到Calendar类中的一些方法
 //-----------------------------
 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.setTime(d1);
  cal2.setTime(d2);
  int subYear = cal1.get(Calendar.YEAR)-cal2.get(Calendar.YEAR);
  //subYear==0,说明是同一年
  if(subYear == 0)
  {
   if(cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
  }
  //例子:cal1是"2005-1-1",cal2是"2004-12-25"
  //java对"2004-12-25"处理成第52周
  // "2004-12-26"它处理成了第1周,和"2005-1-1"相同了
  //大家可以查一下自己的日历
  //处理的比较好
  //说明:java的一月用"0"标识,那么12月用"11"
  else if(subYear==1 && cal2.get(Calendar.MONTH)==11)
  {
   if(cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
  }
  //例子:cal1是"2004-12-31",cal2是"2005-1-1"
  else if(subYear==-1 && cal1.get(Calendar.MONTH)==11)
  {
   if(cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
    return true;
   
  }
  return false;
 }
 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
 
  //测试1
  boolean a = isSameDate("2005-1-1","2005-1-3");
  if(a)
  {
   System.out.println("2005-1-1和2005-1-3是同一周!");
  }
  else
  {
   System.out.println("2005-1-1和2005-1-3不是同一周!");
  }
 
 
  //测试2
  boolean b = isSameDate("2005-1-1","2004-12-25");
  if(b)
  {
   System.out.println("2005-1-1和2004-12-25是同一周!");
  }
  else
  {
   System.out.println("2005-1-1和2004-12-25不是同一周!");
  }
 
  boolean c = isSameDate("2004-12-25","2005-1-1");
  if(c)
  {
   System.out.println("2004-12-25和2005-1-1是同一周!");
  }
  else
  {
   System.out.println("2004-12-25和2005-1-1不是同一周!");
  }
 
 
  //测试3
  boolean d = isSameDate("2005-1-1","2004-12-26");
  if(d)
  {
   System.out.println("2005-1-1和2004-12-26是同一周!");
  }
  else
  {
   System.out.println("2005-1-1和2004-12-26不是同一周!");
  }
 
  boolean e = isSameDate("2004-12-26","2005-1-1");
  if(e)
  {
   System.out.println("2004-12-26和2005-1-1是同一周!");
  }
  else
  {
   System.out.println("2004-12-26和2005-1-1不是同一周!");
  }
 
 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值