★☆★问下java里计算日期天数的问题, 100分相送★☆★★☆★★☆★

zhouysh 2005-02-18 03:21:38
我现在是这样一个问题 :
给一个开始日期和一个终止日期 (可以是Date型 或 String)

我相求他们之间的天数是多少??还要求这2个日期之间(除掉星期6和星期7)的天数???

请问怎么写呢???最好能给一段代码 谢谢

100分相送 !!!!
...全文
492 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouysh 2005-03-02
  • 打赏
  • 举报
回复
楼上的 你真无敌```
DanielYWoo 2005-02-21
  • 打赏
  • 举报
回复
如果只是简单算日期差,用d.getTime()求差除3600000*24是最快捷的,但是对于某些Locale,16世纪之前的日期计算,转换成Calendar时要注意一些问题。
在大多数国家里,Julian Calendar被Gregorian Calendar(公历)替换发生在1582年10月15日,因为Julian Calendar和公历的leap year差别(公历多一个400年一闰),这样为了平稳的从Julian Calendar过渡到公历,从1582年10月4日直接跟着就是1582年10月15日, 中间的日期就没了!
如果你用的Locale碰巧在某些对公历接受比较晚的国家,比如在比利时,1584年才使用公历,这段消失的日期又会不一样。

当然,如果你的程序不会操作这么变态的日期,你就不用关心太多Locale的问题,GregorianCalendar这个类这么复杂是有道理的
zhch200 2005-02-18
  • 打赏
  • 举报
回复
看看行不行
zhch200 2005-02-18
  • 打赏
  • 举报
回复
public static void main(String[] args)
{
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");

String ooo = "2005-02-18 15:39:15";
String ppp = "2005-02-01 15:25:15";
try
{
Date from = s.parse(ooo);
Date to = s.parse(ppp);
System.out.println(getDateNum(from, to));
}
catch (Exception e)
{
System.out.println(e);
}

}
zhch200 2005-02-18
  • 打赏
  • 举报
回复
public static int getDateNum(Date from, Date to)
{
long time;
if (from.getTime() > to.getTime())
{
time = from.getTime() - to.getTime();
}
else
{
time = to.getTime() - from.getTime();
}

// 2个时间段之间的天数
int dateNum = (int) (time / 1000 / 60 / 60 / 24);

int weekNum = dateNum / 7;

int resNum = dateNum % 7;

Calendar calendar = Calendar.getInstance();

calendar.setTime(from);

int num = 0;
for (int i = 0; i < resNum; i++)
{
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
{
num++;
}
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
{
num++;
}
calendar.add(Calendar.DATE, 1);
}

dateNum = dateNum - dateNum / 7 * 2 - num;

return dateNum;
}
zhouysh 2005-02-18
  • 打赏
  • 举报
回复
楼上的dateNum2 中的礼拜5,礼拜6的天数不是很好算啊 你是算开头 还是算结尾?
zhch200 2005-02-18
  • 打赏
  • 举报
回复
dateNum :用上面的方法取得2个时间段之间的天数

dateNum/7 : 这些天数之间有多少个礼拜

dateNum/7 * 2 : 这些天数之间有多少个礼拜5,礼拜6

dateNum%7 : 不能组成一个礼拜的天数(问题是如何求这几天中,礼拜5和礼拜6的天数)
这几天可以在时间开头,也可以在时间段尾部
可以将这几天分离开来,用办法判断是否是礼拜5,礼拜6

dateNum2 : 上面dateNum%7 中礼拜5,礼拜6的天数

所以天数是dateNum - dateNum/7 * 2 - dateNum2


zhouysh 2005-02-18
  • 打赏
  • 举报
回复
楼上写的 更不明白了````
解释下!
huang_yb 2005-02-18
  • 打赏
  • 举报
回复
int n1 =日期之间的差额;
int n2 =-n1/7*2;
int n3 = n1%7;
int n4 =开始日期的星期数;
if (n4+n3)>6
n3 = -2;
else if (n4+n3)<6
n3 = 0;
else
n3 = -1;

int 去除后的结果=n1+n2+n3;

--------------------------------------------------
注:具体的边界问题自己注意一下。
zhouysh 2005-02-18
  • 打赏
  • 举报
回复
mengxianwei007(斩不断<==>理还乱) 讲下你2个方法的思路啊
看不明白:(
zhouysh 2005-02-18
  • 打赏
  • 举报
回复
回复人: qybao(阿宝)
的死方法很好理解
呵呵 执行效率也还好 !!!
zhouysh 2005-02-18
  • 打赏
  • 举报
回复
我也看的快吐了......
GaryZhu 2005-02-18
  • 打赏
  • 举报
回复
都是些什么玩意,看的我只想吐血。。。
mengxianwei007 2005-02-18
  • 打赏
  • 举报
回复
还有一个比较简单的判断星期的方法:

public int dayofweek( int year, int month, int day )
{
int a = (14-month) / 12;
int y = year - a;
int m = month + 12*a - 2;
return (day + y + y/4 - y/100 + y/400 + (31*m)/12) % 7;
}

mengxianwei007 2005-02-18
  • 打赏
  • 举报
回复
简单。这里有一个判断日期的一段代码,你插上,每一天都判断一下是不是礼拜六或礼拜天(礼拜天返回值是0)

public int getWeek(){
int Days[] = {31,59,90,120,151,181,212,243,273,304,334,365};
long n = (_year-1L)*365 + _day + (_year-1L)/4 - (_year-1L)/100 + (_year-1L)/400;
if(_month>1)
n+=Days[_month-2];
if((_month>2)&&(_year%4==0&&_year%100!=0||_year%400==0))
n++;
return n%7;
}

如果判断是就跳过,不是就自动加1。
qybao 2005-02-18
  • 打赏
  • 举报
回复
count day by day, this is not a good method

class DateTest {
public static void main(String[] args) {
String s1="2005-02-01 15:25:15";
String s2="2005-02-18 15:39:15";

DateTest dt = new DateTest();

int days[] = dt.countDays(s1, s2);
for (int i=0; i<days.length; i++) {
System.out.println("days[" + i + "] = " + days[i]);
}
}

public int[] countDays(Calendar c1, Calendar c2) {
int[] days = new int[2];
days[0] = 0;
days[1] = 0;
while (c2.after(c1)) {
days[0]++;
if (c1.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY &&
c1.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
days[1]++;
}
c1.add(Calendar.DATE, 1);
}

return days;
}

public int[] countDays(Date d1, Date d2) {
Calendar c1 = new GregorianCalendar();
Calendar c2 = new GregorianCalendar();
c1.setTime(d1);
c2.setTime(d2);
return countDays(c1, c2);
}

public int[] countDays(String s1, String s2) {
try {
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");
Date d1 = s.parse(s1);
Date d2 = s.parse(s2);
return countDays(d1, d2);
} catch (Exception e) {
return null;
}
}
}
mlaw 2005-02-18
  • 打赏
  • 举报
回复
改成:
date=(aa/1000/60/60/24/7)*5+((aa/1000/60/60/24)%7)
应该差不多是这样吧
GaryZhu 2005-02-18
  • 打赏
  • 举报
回复
我说的一天天算是指从开始日期开始利用Calendar的add()方法一天天加,每次get(Calendar.DAY_OF_WEEK),不是SATURDAY,SUNDAY的话天数就加上1,直到add到结束日期
-_-这个是死方法,很烂

简单一点,可以先计算开始日期所在周的最后一天,和结束日期所在周的最后一天之间的天数,然后当中的周六周日数就好算了(天数/7 ×2),剩下就是调整一下实际开始日期和实际结束日期对天数的影响就ok了
zhouysh 2005-02-18
  • 打赏
  • 举报
回复
恩 明白 楼上的意思 thx

现在最主要的问题 是要除去星期六和日哦 ````
bclin 2005-02-18
  • 打赏
  • 举报
回复
public class forother {
public static void main(String[] args){

SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss");

String ooo="2005-02-18 15:39:15";
String ppp="2005-02-01 15:25:15";
try{
Date tt=s.parse(ooo);
Date yy=s.parse(ppp);
long aa;
if(tt.getTime()>yy.getTime())
aa=tt.getTime()-yy.getTime();
else
aa=yy.getTime()-tt.getTime();
long date=aa/1000/60/60/24;
System.out.println("***");
System.out.println("hahahha"+date);
System.out.println("*******");
}catch(Exception e){

}

}
}
不除去星期天
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧