而且,一周的第一天是可以任意指定的。即,如果指定了一周的第一天是周五,那么如果今天是周四的话,下周的第一天指的就是第二天。
对JDK 1.4的Calendar类很不熟悉,请教有解决过类似问题的同志,能给个指点么?
对JDK 1.4的Calendar类很不熟悉,请教有解决过类似问题的同志,能给个指点么?
解决方案 »
- i++ 简单但不是很明白的问题
- struts+hibernate+spring整合高手进
- 使用ObjectOutputStream 向文件进行多次追加写时,如何使后面启动的写入操作不写头标志?
- 喜欢JDK6 BETA的来看看哈
- 在JSP中,有什么免费的报表API推荐
- jbuilder打开文件后,同一目录下会出现无数个xx.~java~ 或 xx.~jsp~的文件,有什么办法不让它出现?
- 请问想遍一个麻将程序要用到什么算法?
- 有人用过VCafe吗???来帮帮我吧!!我的查询出问题了!!!!
- 请教将字符类型转化为整数类型的函数,多谢!
- java中如何求得两个日期之间相差的天数?
- 如何实现电梯升降模型!!!
- [高手来看]请问如何监听语音modem而获得来电显示号码?[高分求助]
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
cal.add(GregorianCalendar.DATE,-3);//前推3天的日期
System.out.println(cal.getTime());cal.add(GregorianCalendar.DATE,-7);//上一周的日期
addMonth()
addMonth().addMonth().addMonth()
Calendar类里面的add方法
比如今天是周四,那么一般来说下一周的第一天应该是下周一。
但现在要求每周的第一天是可以指定的,那么如果指定了每周的第一天是周六的话,下一周的第一天就是本周周六了。
我查了API,本来以为Calender的setFirstDayOfWeek()和getFirstDayOfWeek()可以解决这个问题。但我发现即使用setFirstDayOfWeek()方法设置了一周的第一天,用calendar.get(Calendar.DAY_OF_WEEK)取得的数字仍然没有变化;例子如下:
public void getPaymentDate(String firstDayOfWeek){
Calendar calendar = new GregorianCalendar();
String firstDayOfThisWeek = Integer.toString(calendar.getFirstDayOfWeek());
if (logger.isDebugEnabled()) {
logger.debug("---------------initialization");
} if (logger.isDebugEnabled()) {
logger.debug("getPaymentDate() - DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
} calendar.setFirstDayOfWeek(Integer.parseInt(firstDayOfWeek));
if (logger.isDebugEnabled()) {
logger.debug("---------------after set first day of week parameter");
}
if (logger.isDebugEnabled()) {
logger.debug("getPaymentDate() - DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
}
}
运行结果如下:
2005-07-14 15:54:59,881 org.zmaze.util.CalendarTest(CalendarTest.java:24)
DEBUG: ---------------initialization
2005-07-14 15:54:59,921 org.zmaze.util.CalendarTest(CalendarTest.java:28)
DEBUG: getPaymentDate() - DAY_OF_WEEK: 5
2005-07-14 15:54:59,931 org.zmaze.util.CalendarTest(CalendarTest.java:34)
DEBUG: ---------------after set first day of week parameter
2005-07-14 15:54:59,931 org.zmaze.util.CalendarTest(CalendarTest.java:38)
DEBUG: getPaymentDate() - DAY_OF_WEEK: 5
现在大家知道我的意思了吧。有没有好的思路或者解决方法呢?请不吝赐教。
最好不要用getTime()方法具体的去计算毫秒数,那样类似的方法我已经用javascript在客户端实现了。现在就是想了解一下用java的API有没有比较成型的解决方案。
多谢各位。
Calendar calendar = new GregorianCalendar();
Calendar calNextWeek = (Calendar)calendar.clone();
Calendar calNext2Week = (Calendar)calendar.clone();
Date dateNextWeek = new Date();
Date dateNext2Week = new Date();
String strNextWeek = "";
String strNext2Week = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'-'MM'-'dd");
int firstDayOfWeek = Integer.parseInt(strFirstDayOfWeek);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
dayOfWeek = (dayOfWeek == 0) ? 7 : dayOfWeek;
int days2NextWeek = (6 - (dayOfWeek - firstDayOfWeek)) % 7;
int days2Next2Week = days2NextWeek + 7;
calNextWeek.add(Calendar.DATE,days2NextWeek);
calNext2Week.add(Calendar.DATE,days2Next2Week);
dateNextWeek = calNextWeek.getTime();
dateNext2Week = calNext2Week.getTime(); if (logger.isDebugEnabled()) {
logger.debug("getPaymentDate(String) - : firstDayOfWeek="
+ firstDayOfWeek + ", dayOfWeek=" + dayOfWeek
+ ", days2NextWeek=" + days2NextWeek + ", days2Next2Week="
+ days2Next2Week);
} strNextWeek = sdf.format(dateNextWeek);
strNext2Week = sdf.format(dateNext2Week);
}
int dayOfWeek=cal.get(cal.DAY_OF_WEEK)-cal.getFirstDayOfWeek();//当天是星期几