Java 对时间的操作,分割日期,获取常用时间

最近在做一个需求就是获取钉钉打卡数据,在做这个需求时涉及到了大量的对时间的操作,这里就对使用过的方法做一个记录,本人也是一个刚毕业投入工作的代码萌新。对于很多的代码不够理解,只能够使用,现在先记载下来,后面在加以研究。

先是获取几个常用时间的方法

// 计算一周前0点的时间戳
	public long oneWeekAgo() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 7,
				00, 00, 00);
		return calendar.getTime().getTime();
	}

	// 计算昨天0点的时间戳
	public long yestodayTimestamp() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 1,
				00, 00, 00);
		return calendar.getTime().getTime();
	}

	// 计算今天0点的时间戳
	public long startTimestamp() {
		Long time = System.currentTimeMillis(); // 当前时间的时间戳
		// System.out.println(zero);
		return time / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
	}

	// 计算明天天23点59分59秒的时间戳
	public long endTimestamp() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) + 1,
				23, 59, 59);
		return calendar.getTime().getTime();
	}

将一段时间以周,天分割

/**
	 * 
	 * @param dBegin
	 * @param dEnd
	 * @return List<Long> 计算一个时间段内的每一天的时间毫秒数
	 */
	public static List<Long> findDates(Date dBegin, Date dEnd) {
		List<Long> timelist = new ArrayList<>();
		Long time = 0L;
		Calendar calBegin = Calendar.getInstance();
		calBegin.setTime(dBegin);
		Calendar calEnd = Calendar.getInstance();
		calEnd.setTime(dEnd);
		while (dEnd.after(calBegin.getTime())) {
			time = calBegin.getTimeInMillis();
			timelist.add(time);
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
		}
		time = calEnd.getTimeInMillis();
		timelist.add(time);
		return timelist;
	}

	/**
	 * 将时间按照星期分割
	public static List<String> doDateType(String startDate, String endDate) throws ParseException {
		List<String> listWeekOrMonth = new ArrayList<String>();
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date sDate = dateFormat.parse(startDate);
		Calendar sCalendar = Calendar.getInstance();
		sCalendar.setFirstDayOfWeek(Calendar.MONDAY);
		sCalendar.setTime(sDate);
		Date eDate = dateFormat.parse(endDate);
		Calendar eCalendar = Calendar.getInstance();
		eCalendar.setFirstDayOfWeek(Calendar.MONDAY);
		eCalendar.setTime(eDate);
		boolean bool = true;
		while (sCalendar.getTime().getTime() < eCalendar.getTime().getTime()) {
			if (bool || sCalendar.get(Calendar.DAY_OF_WEEK) == 2 || sCalendar.get(Calendar.DAY_OF_WEEK) == 1) {
				listWeekOrMonth.add(dateFormat.format(sCalendar.getTime()));
				bool = false;
			}
			sCalendar.add(Calendar.DAY_OF_MONTH, 1);// 加一天

		}
		listWeekOrMonth.add(dateFormat.format(eCalendar.getTime()));
		if (listWeekOrMonth.size() % 2 != 0) {
			listWeekOrMonth.add(dateFormat.format(eCalendar.getTime()));
		}
		return listWeekOrMonth;
	}
	//上面的对方法doDateType的调用会获取每一个时间节点,可以通过这种方式循环获取一对时间
	for (int g = 0; g < weekList.size(); g += 2) { // 根据时间分割循环获取
			startTime = weekList.get(g);
			endTime = weekList.get(g + 1);
	}

将毫秒数转化为时间

	Long sd=1345185923140L;  
    Date date = new Date(); // 实例化对象 
    date.setTime(sd);     
    String workDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);    
    System.out.println(workDate); 

将String类型的时间转化为Calendar格式

	String startDate = "2020-07-21 00:00:00";
	DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	Date sDate = dateFormat.parse(startDate);
	Calendar sCalendar = Calendar.getInstance(); //实例化对象
	sCalendar.setFirstDayOfWeek(Calendar.MONDAY); //设置一周以那一天为第一天,这里为以周一为1
	//默认为以周日为1
	sCalendar.setTime(sDate);

后续在继续补充

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Outlier9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值