Calendar用法求解

h54068650 2012-06-26 03:54:43
小弟现在用Calendar循环推算时间,方法为:

public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Calendar c = Calendar.getInstance();
c.setTime(new Date());
Date sDate = new Date();
Date date = new Date();
int dayssh = c.get(Calendar.DATE);
for (int i = 0; i < 50; i++) {
c.set(Calendar.DECEMBER, dayssh-1);
// c.set(Calendar.DAY_OF_MONTH, dayssh-1);
Date as = c.getTime();
date.setDate(sDate.getDate() - i);
System.out.println(date.toLocaleString());
}
}

输出的结果却是:
2012-6-26 15:57:01
2012-6-25 15:57:01
2012-6-24 15:57:01
2012-6-23 15:57:01
2012-6-22 15:57:01
2012-6-21 15:57:01
2012-6-20 15:57:01
2012-6-19 15:57:01
2012-6-18 15:57:01
2012-6-17 15:57:01
2012-6-16 15:57:01
2012-6-15 15:57:01
2012-6-14 15:57:01
2012-6-13 15:57:01
2012-6-12 15:57:01
2012-6-11 15:57:01
2012-6-10 15:57:01
2012-6-9 15:57:01
2012-6-8 15:57:01
2012-6-7 15:57:01
2012-6-6 15:57:01
2012-6-5 15:57:01
2012-6-4 15:57:01
2012-6-3 15:57:01
2012-6-2 15:57:01
2012-6-1 15:57:01
2012-5-31 15:57:01
2012-4-29 15:57:01
2012-3-29 15:57:01
2012-2-26 15:57:01
2012-1-27 15:57:01
2011-12-26 15:57:01
2011-11-24 15:57:01
2011-10-24 15:57:01
2011-9-22 15:57:01
2011-8-22 15:57:01
2011-7-21 15:57:01
2011-6-19 15:57:01
2011-5-19 15:57:01
2011-4-17 15:57:01
2011-3-17 15:57:01
2011-2-13 15:57:01
2011-1-15 15:57:01
2010-12-14 15:57:01
2010-11-12 15:57:01
2010-10-12 15:57:01
2010-9-10 15:57:01
2010-8-10 15:57:01
2010-7-9 15:57:01
2010-6-7 15:57:01
为什么算到5月31号就开始跳错了呢?求解
...全文
331 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-06-27
  • 打赏
  • 举报
回复
首先Date的set,get函数都过时了,最好不要用了。再者,setDate(int n)的时候,n应该是1-31之间的值,你的循环中会出现负值,结果也就不确定了。
qybao 2012-06-27
  • 打赏
  • 举报
回复
干嘛要这么麻烦,直接用add就可以了
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Calendar c = Calendar.getInstance();
//c.set
//int dayssh = c.get(Calendar.DATE);
for (int i = 0; i < 50; i++) {
//c.set(Calendar.DATE, dayssh-i);
System.out.println(c.getTime().toLocaleString());
c.add(Calendar.DAY_OF_YEAR, -1); //每次循环减去一天就可以了
}

}
yjflinchong 2012-06-27
  • 打赏
  • 举报
回复
add(Calendar.DATE, -1); 这个方法可行
add(Calendar.DATE, 1); 反过来输出也不错呀
钢筋裤衩蛋 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

那你何必要if判断呢? 直接用c.add(Calendar.DATE, -1);不就行了吗?
[/Quote]
我菜鸟
vickie1989 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:

你这输出的结果和calendar有关系吗?

大哥,那这个呢?

Java code


public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Calendar c = Cale……
[/Quote]
Calendar c = Calendar.getInstance();
//c.set
int dayssh = c.get(Calendar.DAY_OF_YEAR);
for (int i = 0; i < 80; i++) {
c.set(Calendar.DAY_OF_YEAR, dayssh-i);
System.out.println(c.getTime().toLocaleString());
}


换成Calendar.DAY_OF_YEAR
qqhw123 2012-06-26
  • 打赏
  • 举报
回复
那你何必要if判断呢? 直接用c.add(Calendar.DATE, -1);不就行了吗?
ladybirds2008 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//c.set
Date data = c.getTime();
int dayssh = c.get(Calendar.DATE);

for (int i = 0; i < 50; i++) {
System.out.pri……
[/Quote]多多行善,好好学习,技术到处都是啊。。
钢筋裤衩蛋 2012-06-26
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//c.set
Date data = c.getTime();
int dayssh = c.get(Calendar.DATE);

for (int i = 0; i < 50; i++) {
System.out.println("====>"+(dayssh-i));
System.out.println(">>>"+Calendar.DATE);
if((dayssh-i)>=0){
c.set(Calendar.DATE, dayssh-i);
}else{
c.add(Calendar.DATE, -1);
}
System.out.println(c.getTime().toLocaleString());
}
}
这回就行了
钢筋裤衩蛋 2012-06-26
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
//c.set
Date data = c.getTime();
int dayssh = c.get(Calendar.DATE);

for (int i = 0; i < 50; i++) {
System.out.println("====>"+(dayssh-i));
System.out.println(">>>"+Calendar.DATE);
if((dayssh-i)>=0){
c.set(Calendar.DATE, dayssh-i);
}else{
c.add(Calendar.DATE, -1);
}
System.out.println(c.getTime().toLocaleString());
}
}
这回就行了
Java高知社区 2012-06-26
  • 打赏
  • 举报
回复
楼主你要干什么呀,我对你无语,java都被你糟蹋成这样了,你打印出dayssh-i看看结果是多少
public static void main(String[] args) throws ParseException {
Calendar c = Calendar.getInstance();
int dayssh = c.get(Calendar.DATE);
for (int i = 0; i < 50; i++) {
c.set(Calendar.DATE, dayssh - i);
System.out.println(dayssh - i + "-----------------");
System.out.println(c.getTime().toLocaleString());
}

}
结果是:26-----------------
2012-6-26 17:01:14
25-----------------
2012-6-25 17:01:14
24-----------------
2012-6-24 17:01:14
23-----------------
2012-6-23 17:01:14
22-----------------
2012-6-22 17:01:14
21-----------------
2012-6-21 17:01:14
20-----------------
2012-6-20 17:01:14
19-----------------
2012-6-19 17:01:14
18-----------------
2012-6-18 17:01:14
17-----------------
2012-6-17 17:01:14
16-----------------
2012-6-16 17:01:14
15-----------------
2012-6-15 17:01:14
14-----------------
2012-6-14 17:01:14
13-----------------
2012-6-13 17:01:14
12-----------------
2012-6-12 17:01:14
11-----------------
2012-6-11 17:01:14
10-----------------
2012-6-10 17:01:14
9-----------------
2012-6-9 17:01:14
8-----------------
2012-6-8 17:01:14
7-----------------
2012-6-7 17:01:14
6-----------------
2012-6-6 17:01:14
5-----------------
2012-6-5 17:01:14
4-----------------
2012-6-4 17:01:14
3-----------------
2012-6-3 17:01:14
2-----------------
2012-6-2 17:01:14
1-----------------
2012-6-1 17:01:14
0-----------------
2012-5-31 17:01:14
-1-----------------
2012-4-29 17:01:14
-2-----------------
2012-3-29 17:01:14
-3-----------------
2012-2-26 17:01:14
-4-----------------
2012-1-27 17:01:14
-5-----------------
2011-12-26 17:01:14
-6-----------------
2011-11-24 17:01:14
-7-----------------
2011-10-24 17:01:14
-8-----------------
2011-9-22 17:01:14
-9-----------------
2011-8-22 17:01:14
-10-----------------
2011-7-21 17:01:14
-11-----------------
2011-6-19 17:01:14
-12-----------------
2011-5-19 17:01:14
-13-----------------
2011-4-17 17:01:14
-14-----------------
2011-3-17 17:01:14
-15-----------------
2011-2-13 17:01:14
-16-----------------
2011-1-15 17:01:14
-17-----------------
2010-12-14 17:01:14
-18-----------------
2010-11-12 17:01:14
-19-----------------
2010-10-12 17:01:14
-20-----------------
2010-9-10 17:01:14
-21-----------------
2010-8-10 17:01:14
-22-----------------
2010-7-9 17:01:14
-23-----------------
2010-6-7 17:01:14

自己反省反省吧……
qqhw123 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
根据结果可以看出,当为负数的时候
0 6--0 -->5-31 6月的第0天可以看做5月31
-1 5--(-1) -->4-29 5月的第-1天则为4月29即在5月第0天(4.30)再减去1天
-2 4--(-2) -->3-29 4月的第-2天为3月29 即在5月第0天(4.30)再减去2天
...
[/Quote]

写错了点 应该是4月的第0天再减去2
qqhw123 2012-06-26
  • 打赏
  • 举报
回复
根据结果可以看出,当为负数的时候
0 6--0 -->5-31 6月的第0天可以看做5月31
-1 5--(-1) -->4-29 5月的第-1天则为4月29即在5月第0天(4.30)再减去1天
-2 4--(-2) -->3-29 4月的第-2天为3月29 即在5月第0天(4.30)再减去2天
...
钢筋裤衩蛋 2012-06-26
  • 打赏
  • 举报
回复
你那个dayssh-i貌似到5月底时候为0;下一个值应该是负数了我也是新手
qqhw123 2012-06-26
  • 打赏
  • 举报
回复
因为当i=26的时候,sDate.getDate() - i = 0 这个时候是5月31日
当i=27的时候,sDate.getDate() - i = -1 这里就会出错了。
h54068650 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你这输出的结果和calendar有关系吗?
[/Quote]
大哥,那这个呢?

public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
Calendar c = Calendar.getInstance();
//c.set
int dayssh = c.get(Calendar.DATE);
for (int i = 0; i < 50; i++) {
c.set(Calendar.DATE, dayssh-i);
System.out.println(c.getTime().toLocaleString());
}

}
gukuitian 2012-06-26
  • 打赏
  • 举报
回复
你这输出的结果和calendar有关系吗?
h54068650 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Date as = c.getTime();似乎没有用到啊
[/Quote]
大哥,这个没用到和这方法没啥关系吧?这只是我随便写东西的一个测试类。。。
goodtime 2012-06-26
  • 打赏
  • 举报
回复
Date as = c.getTime();似乎没有用到啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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