日历、时间日期、星期、月份的算法(Calendar类对日期的处理)
来源:互联网 发布:crt软件是什么 编辑:程序博客网 时间:2024/06/04 23:32
package cn.keymobile.calendar;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import org.junit.Test;/** * @author zhaojd * Calendar 类测试 */public class KeyCalendar { @Test public void testCalendar() throws Exception { /** * 使用SimpleDateFormat表示的当前时间值 */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("现在的时间是:" + sdf.format(new Date())); /** * 使用Calendar来表示当前时间值 */ Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); System.out.println("现在的时间是(使用Calendar):" + calendar.get(Calendar.YEAR) // + "-" + (calendar.get(Calendar.MONTH) + 1) // + "-" + calendar.get(Calendar.DAY_OF_MONTH) + ": 星期" // + (calendar.get(Calendar.DAY_OF_WEEK) - 1)); /** * 计算自己从出生已经度过了多少天 */ long nowMillis = calendar.getTimeInMillis(); calendar.set(1992, 9, 13); long bornMillis = calendar.getTimeInMillis(); long days = (nowMillis - bornMillis) / (24 * 60 * 60 * 1000); System.out.println("从出生到现在我已经度过了" + days + "天;"); } /** * @throws Exception 计算某一月份的最大天数 */ @Test public void calculateMaxDays() throws Exception { Calendar calendar = Calendar.getInstance(); /** * 如果calendar不设置时间,则计算的是1970年1月 */ calendar.setTime(new Date()); calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)); /** * 这里的Calendar.MONTH = 9;也就是实际的10月份,因为0表示的January */ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)); int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(maxDays); } /** * Calendar和Date之间的转换 * * @throws Exception */ @Test public void convertDateAndCalculate() throws Exception { /** * 1. Calendar转化为Date */ Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); System.out.println(date); /** * 2. Date转化为Calendar */ Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); /** * 3. 格式化输出日期时间 */ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); sdf.format(new Date()); /** * 4. 计算一年中的第几星期 */ //4.1计算 某一天是一年中的第几星期 Calendar calendar3 = Calendar.getInstance(); calendar3.setTime(new Date()); calendar3.set(Calendar.YEAR, calendar3.get(Calendar.YEAR)); calendar3.set(Calendar.MONTH,calendar3.get(Calendar.MONTH)); calendar3.set(Calendar.DAY_OF_MONTH, 8); calendar3.get(Calendar.WEEK_OF_YEAR); //4.2计算一年中的第几星期是几号 Calendar calendar4 = Calendar.getInstance(); calendar4.setTime(new Date()); calendar4.set(Calendar.YEAR, calendar4.get(Calendar.YEAR)); calendar4.set(Calendar.WEEK_OF_YEAR, 2); calendar4.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); System.out.println(sdf.format(calendar4.getTime())); //2016-01-04 /** * 5. add()和roll()的用法 */ //5.1 add()方法 Calendar calendar5 = Calendar.getInstance(); calendar5.setTime(new Date()); calendar5.set(Calendar.YEAR, calendar5.get(Calendar.YEAR)); calendar5.set(Calendar.MONTH, calendar5.get(Calendar.MONTH)); calendar5.set(Calendar.DAY_OF_MONTH, 6); calendar5.add(Calendar.DATE, -3); System.out.println(sdf.format(calendar5.getTime())); //2016-10-03 calendar5.add(Calendar.DATE,3); System.out.println(sdf.format(calendar5.getTime())); //2016-10-06 //5.2 roll() 方法 Calendar calendar6 = Calendar.getInstance(); calendar6.setTime(new Date()); calendar6.set(Calendar.YEAR, calendar6.get(Calendar.YEAR)); calendar6.set(Calendar.MONTH, calendar6.get(Calendar.MONTH)); calendar6.set(Calendar.DAY_OF_MONTH, 4); calendar6.roll(Calendar.DATE, -5); System.out.println(sdf.format(calendar6.getTime()));//2016-10-30 calendar6.roll(Calendar.DATE, 5); System.out.println(sdf.format(calendar6.getTime()));//2016-10-04 //备注:roll()方法在本月内循环,一般使用add()方法。 } /** * 6. 计算两个任意时间中间的间隔天数 */ //6.1 传入Calendar对象 /** * * @param startDay 开始时间 * @param endDay 结束时间 * @return * @throws Exception */ @Test public long getIntervalDays(Calendar startDay,Calendar endDay) throws Exception { //确保startDay在endDay之前 if(startDay.after(endDay)){ Calendar cal = startDay; startDay = endDay; endDay = cal; } long sub = (endDay.getTimeInMillis()) - (startDay.getTimeInMillis()); return (sub) / (24*60*60*1000); } //6.2 传入Date对象 /** * 计算两个时间相隔天数 * @param startDay 开始时间 * @param endDay 结束时间 * @throws Exception */ @Test public long getIntervalDays(Date startDay,Date endDay) throws Exception { //确保startDay在endDay之前 if(startDay.after(endDay)){ Date date = startDay; startDay = endDay; endDay = date; } long sub = endDay.getTime() - startDay.getTime(); return sub/24*60*60*1000; } /** * 同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等 * 注:以上方法是完全按时间计算,有时并不能令人满意,如: * startday="2016-10-11 20:00:00" endday="2016-10-12 8:00:00" */ /** * 7.改进精确计算相隔天数的方法 * @param d1 * @param d2 * @return */ @Test public int getDaysBetween(Calendar d1, Calendar d2) { if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end Calendar swap = d1; d1 = d2; d2 = swap; } int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); int y2 = d2.get(Calendar.YEAR); if (d1.get(Calendar.YEAR) != y2) { d1 = (Calendar) d1.clone(); do { days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 得到当年的实际天数 d1.add(Calendar.YEAR, 1); } while (d1.get(Calendar.YEAR) != y2); } return days; } @Test public void testGetDaysBetween() throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date startTime = sdf.parse("2016-10-11 20:00:00"); Date endTime = sdf.parse("2016-10-12 8:00:00"); Calendar d1 = Calendar.getInstance(); Calendar d2 = Calendar.getInstance(); d1.setTime(startTime); d2.setTime(endTime); System.out.println(getDaysBetween(d1, d2)); }}
0 0
- 日历、时间日期、星期、月份的算法(Calendar类对日期的处理)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)(一)
- (2.1.25)关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)
- java中对时间,日期,星期,月份的操作(Java中Calendar的使用方法)
- java 中Calendar类中对日期的处理
- Calendar对日期的操作
- ORACLE对日期时间的处理
- mysql对日期时间的处理
- to_char对日期时间简单的处理
- java对日期时间的处理
- java对日期时间的处理
- Javascript对日期的月份加减做法
- 5.0新布局CoordinatorLayout的酷炫动画
- iOS开发知识体系
- Mac中MariaDB数据库的安装步骤
- 求字符串的长度(不适用任何库函数)
- apache--BeanUtils工具类底层代码演示
- 日历、时间日期、星期、月份的算法(Calendar类对日期的处理)
- python切片索引循环砍掉最后一个字符
- Leetcode-118. Pascal's Triangle
- WebView详解
- 求一个数的二进制序列中1的个数
- DOM学习笔记---遍历页面所有元素节点
- 升级到Android Studio2.2 后打不开以前版本的项目
- 数据结构实验之二叉树五:层序遍历(队列)
- hdu 1039 (字符串水题)