栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java日期遍历

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java日期遍历

1,代码形式:此代码借鉴执梗大佬。执梗

public class Main{
	static int[] M= {0,31,28,31,30,31,30,31,31,30,31,30,31};
	public static void main(String[] args) {
		int ans=0;
		int y=1900,m=1,d=1;
		//先升日期再升值
		//一直在疑惑9999,12,31没有判断,实际判断了,因为先增日期,在判断的。
		//9999.12.30执行时,d++,判断的31号的。
		//同时1900.1.1没有判断的,直接从1900.1.2开始的判断。
		while(y!=9999||m!=12||d!=31) {
			if(y%400==0||(y%4==0&&y%100!=0)){
				M[2]=29;
			}else {
				M[2]=28;
			}
			
			d++;
			if(d>M[m]) {
				m++;
				d=1;
			}
			if(m>12) {
				m=1;
				y++;
			}
			//此处调用对日期的判断的处理函数,完成题目的要求。
			//if(check(y,m,d)) {
			//	ans++;
			//}
		}
		System.out.println(ans);
	}
}

2,API遍历形式:代码有点问题,如果开始时间早于1949.5.2就会进入死循环。例如begindate设为1949.5.1就会停不下来。具体原因看下方。

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


public class 遍历时间段 {
	public static void main(String[] args) throws ParseException {
		Calendar c = Calendar.getInstance();
		SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");
		
		Date begindate =  simple.parse("2022-1-1");
		Date enddate = simple.parse("2022-3-2");
		Date tmp = begindate;
		
		while(!tmp.equals(enddate)) {
			System.out.println(simple.format(tmp));
			c.setTime(tmp);
			c.add(Calendar.DATE, 1);
			tmp = c.getTime();
		}
		
	}
}

进入死循环主要是因为日期没有判定相同,把所有tmp的CST时间打印出来看结果

从1949.5.1的每天开始时间变为了1点。这时用enddate的0点去比较,自然会认为不相等,也就进入了死循环了。至于为什么突然变为了1点,不知道没想明白。有了解的大佬,可以评论给一下解释。这里初步猜测是这个CDT时间有关。这个是北美夏令时,比CST提前一个小时。但是打印结果显示,只在这一年的这个月突然使用了CDT,别的没有,没搞懂,不理解,不知道。
CDT和CST:https://zh-cn.livingeconomyadvisors.com/19476-is-dallas-cst-or-cdt
解决如下:
修改点:
1,while循环中添加:c.set(Calendar.HOUR_OF_DAY,0);
2,c.clear();可以加上

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


public class 遍历时间段 {
	public static void main(String[] args) throws ParseException {
		Calendar c = Calendar.getInstance();
		SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");
		c.clear();	//这个clear最好也加上,calendar有时因为这个也会有些坑。。
		
		Date begindate =  simple.parse("1900-1-1");
		Date enddate = simple.parse("10000-03-01");
		//Date aa = simple.parse("1966-03-01");
		
		Date tmp = begindate;
		int count = 0;
		while(enddate.compareTo(tmp) != 0) {
			System.out.println(simple.format(tmp));
			c.setTime(tmp);
			c.add(Calendar.DATE, 1);
			c.set(Calendar.HOUR_OF_DAY,0);
			tmp = c.getTime();
		}
}

参考:
https://blog.csdn.net/weixin_41713281/article/details/104390355
https://www.cnblogs.com/nathansz/p/6055468.html

java还有其他的相关日期类。
Date类。
Calendar类
LocalDate类等。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号