请教如何计算某一段日期内星期几是多少号?

nai598455803 2013-11-07 09:37:41
比如说,2013-11-7 到2013-11-30 这段日期内, 周一,周三,周日分别为10,11,13,17,18,20,24,25,27 日 , 如何才能通过程序取出来呢。


最好是通过sql 语句直接取出来,如果不能java 代码也行。
数据库中这么存的,start_date(2013-7-11) end_date(2013-11-30) days(1,3,7)
...全文
126 点赞 收藏 13
写回复
13 条回复
邱疯子 2013年11月07日
不知道LZ用的是什么数据库,现在使用Oracle实现了,其中TEST_TABLE为你的表名。希望对楼主有用。

  select tt.tdate, to_char(tdate, 'day') as weekday
  from (select (select to_date(t.start_date) from TEST_TABLE t where t.id = 2 ) + rownum - 1 as tdate
          from all_objects
         where rownum <= (select to_date(t.end_date) from TEST_TABLE t where t.id = 2 ) -
               (select to_date(t.start_date) from TEST_TABLE t where t.id = 2 ) + 1)  tt where to_char(tt.tdate, 'day') in ('星期一','星期二') 
回复 点赞
nai598455803 2013年11月07日
谢谢大家,说的都很有道理
回复 点赞
nai598455803 2013年11月07日
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * 以2012年12月18日为起点,
 * 取出以后三个月中 周一,周三,周五的日期,
 *
 */
public class Test
{
	public static void main(String[] args)
	{
		Calendar cal = Calendar.getInstance();
		
		cal.set(Calendar.YEAR, 2012);
		cal.set(Calendar.MONTH, Calendar.DECEMBER);
		cal.set(Calendar.DAY_OF_MONTH, 18);
		
		Calendar c = (Calendar) cal.clone();
		c.add(Calendar.MONTH, 3);
		
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
		while(!c.before(cal))
		{
			int day = cal.get(Calendar.DAY_OF_WEEK) ;
			if(day == Calendar.MONDAY || day == Calendar.WEDNESDAY || day == Calendar.FRIDAY)
				System.out.println(df.format(cal.getTime()));
			cal.add(Calendar.DATE, 1);
		}
	}
}
找到这么一段代码 不过没看明白是怎么实现的。 原帖,http://bbs.csdn.net/topics/390320166
回复 点赞
风一样的执着 2013年11月07日
输出一个时间段内,时间与星期 后面的事情就简单了。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class Test {
public static void main(String[] args) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
"星期六" };

String begin = "2013-11-01";
String end = "2013-11-10";

SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");


Date date = new Date();
Date dateb = new Date();
Date datee = new Date();
try {
dateb = sdfInput.parse(begin);
datee = sdfInput.parse(end);
} catch (ParseException e) {
e.printStackTrace();
}
long nowTime = dateb.getTime();

Date datenow = new Date();
datenow.setTime(nowTime);
Calendar calendar = Calendar.getInstance();
while(nowTime>=dateb.getTime()&&nowTime<=datee.getTime())
{
calendar.setTime(datenow);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (dayOfWeek < 0)
dayOfWeek = 0;

System.out.println(sdfInput.format(datenow));
System.out.println(dayNames[dayOfWeek]);
calendar.add(calendar.DATE,1);
datenow = calendar.getTime();
nowTime = datenow.getTime();
}
}
}


回复 点赞
nai598455803 2013年11月07日
start_date 是date 类型的, start_time 是int 类型的
回复 点赞
chen2713756 2013年11月07日
你数据库时间那两列是什么类型的数据?日期类型or字符串类型?
回复 点赞
nai598455803 2013年11月07日
数据库这样存的,其实我还需要判断时间。
回复 点赞
兔子托尼啊 2013年11月07日
SELECT DAYOFWEEK('xxx'); 刚发现这个还不错。
回复 点赞
chen2713756 2013年11月07日
数据库的值是怎么存的,能不能sql语句查一把,然后把查询结果截个图贴出来看看。
回复 点赞
ohfiner 2013年11月07日
通过mysql:

select dayofweek(now());
可以查出指定日期是周几,你先把时间查出来,周几就可以得到了。然后得到周几,where 周几等1,3或者日
回复 点赞
nai598455803 2013年11月07日
补充一下,我是知道,开始时间和结束时间这个时间段。 和这段时间里面的星期几? 想要查这段时间里面的星期几是多少号.
回复 点赞
兔子托尼啊 2013年11月07日
网上找的。

	public static void main(String[] args) {
		final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
				"星期六" };

		String s = "2013-11-7";

		SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");

		Calendar calendar = Calendar.getInstance();
		Date date = new Date();

		try {
			date = sdfInput.parse(s);
		} catch (ParseException e) {
			e.printStackTrace();
		}

		calendar.setTime(date);
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		if (dayOfWeek < 0)
			dayOfWeek = 0;
		System.out.println(dayNames[dayOfWeek]);
	}
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告