java 两种方法获取今天属于今年的第多少天,结果不同。

第一种:Calendarc1=Calendar.getInstance();Calendarc2=Calendar.getInstance();c2.set(2012,1... 第一种:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.set(2012, 1, 1, 0, 0, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String c = sdf.format(new Date());
String[] d = c.split("-");
c1.set(Integer.parseInt(d[0]), Integer.parseInt(d[1]), Integer.parseInt(d[2]), 0, 0, 0);
Long b = c1.getTimeInMillis()-c2.getTimeInMillis();
int f = (int) ((((b/1000)/60)/60)/24);
第二种:
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
int x = cal.get(Calendar.DAY_OF_YEAR);
求解!
展开
 我来答
talenthell
2012-11-28 · TA获得超过288个赞
知道小有建树答主
回答量:270
采纳率:0%
帮助的人:171万
展开全部
我检查了几遍,逻辑上没有错,结果差了两天:
原因1: 你获得的是当前天数的0小时:0分:0秒
当你做 int f = (int) ((((b/1000)/60)/60)/24); 这步的时候,最后除完了又转成整数,自动把小数去掉了,所以当前的天数,也就是今天没有算进去,所以少了一天。
解决方法:结尾+1天就可以了。 或者你把所有的换算都改成double型,然后向上取整。

2:当你做c2.set(2012, 1, 1, 0, 0, 0); 这步的时候,你两个日期一减,把2012年1月1日那天也减去了,所以你又少了一天。
解决方法:改成c2.set(2011, 12, 31, 0, 0, 0);或者还是结尾+1
小童鞋_成er
2012-11-28 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
public static void main(String[] args) throws java.text.ParseException{
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("请输入月份..我们会帮你统计出这个月有多少个周一!!");
int yue = sc.nextInt();
if(yue >= 13 || yue <= 0){
System.out.println("月份不存在!");
}else{
java.util.Date date = new java.util.Date(Integer.parseInt(new java.text.SimpleDateFormat("yyyy").format(new java.util.Date())),yue,0);
System.out.println("当前月份的天数:" + new java.text.SimpleDateFormat("dd").format(date));
String _01 = new java.text.SimpleDateFormat("yyyy-MM-dd E").format(new java.util.Date(Integer.parseInt(new java.text.SimpleDateFormat("yyyy").format(new java.util.Date()))-1900,yue - 1,1));
String _30$31 = new java.text.SimpleDateFormat("yyyy-MM-dd E").format(new java.util.Date(Integer.parseInt(new java.text.SimpleDateFormat("yyyy").format(new java.util.Date()))-1900,yue - 1,Integer.parseInt(new java.text.SimpleDateFormat("dd").format(date))));
//System.out.println(_01+"\n"+_30$31);
int jiequ_tian = Integer.parseInt(_01.substring(8, 10));
int jiequ_tians = Integer.parseInt(_30$31.substring(8, 10));
int tongji = 0;
for(int i = 1; i <= jiequ_tians; i++){
String aa = _01.replaceAll(_01.substring(8, 10), String.valueOf(i));
if(aa.length() == 12){
aa = aa.replaceAll(aa.substring(0, 3), new java.text.SimpleDateFormat("yyyy").format(new java.util.Date()));
}else if(aa.length() == 14){
aa = aa.replaceAll(aa.substring(0, 4), new java.text.SimpleDateFormat("yyyy").format(new java.util.Date()));
}
java.text.SimpleDateFormat sim = new java.text.SimpleDateFormat("yyyy-MM-dd E");
java.util.Date dates = sim.parse(aa);
if("星期一".equals(sim.format(dates).substring(11))){
tongji++;
}
}
System.out.println(yue+"月共有"+tongji+"个周一");
}
//根据用户输入的月份计算出本月多少个周一
追问
这……谢谢写了这么多,但是貌似不对题……
追答
e ....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ww_air
2012-11-28 · TA获得超过680个赞
知道小有建树答主
回答量:521
采纳率:0%
帮助的人:418万
展开全部
c2.set(2012,1-1,1,0,0,0);
c1.set(Integer.parseInt(d[0]),Integer.parseInt(d[1])-1,Integer.parseInt(d[2]),0,0,0);
Long b=c1.getTimeInMillis()-c2.getTimeInMillis()+1;
你这3个位置做错了
由于月数组是从0开始,所以你计算的12-28减2-1的日期,而不是11-28减1-1
还有就是今天减今天是0所以你还要加1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2012-11-28 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
计算的日期,相同 ?

肯定第2种优
追问
的确是第二种优而且是正确的,但是从理论上第一种应该也是对的,但为什么误差了两天
追答
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.set(2011, 11, 31, 0, 0, 0); //这样才够数。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
String c = sdf.format(new Date());
String[] d = c.split("-");
c1.set(Integer.parseInt(d[0]), Integer.parseInt(d[1])-1, Integer.parseInt(d[2]), Integer.parseInt(d[3]), 0, 0);
double b = c1.getTimeInMillis()-c2.getTimeInMillis();

整理一下,计算的开始日期应该是去年的最后一天。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
江湖喵喵喵
2012-11-28 · TA获得超过360个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:42.3万
展开全部
c2.set(2012, 1, 1, 0, 0, 0);这句话有问题
月是从0开始的,日是从1开始的
追问
如果月是从0开始,那么误差应该是31或者30,但是我得出的结果误差是2
追答
你说“如果月是从0开始”,说明你在怀疑我的判断,没有把它当做一个事实,在没有搞清楚事实的情况下推断是无意义的。你的推断也是在大脑中思考了一下吧?建议你熟悉一下java的API,使用IDE的话很简单的,例如如果是eclipse的话,选中c2.set(2012, 1, 1, 0, 0, 0),按F2或者F3即可,了解了API后在实际试验一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-28
展开全部
year - 用来设置 YEAR 日历字段的值。
month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
date - 用来设置 DAY_OF_MONTH 日历字段的值。
hourOfDay - 用来设置 HOUR_OF_DAY 日历字段的值。
minute - 用来设置 MINUTE 日历字段的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式