日期工具类
来源:互联网 发布:矩阵的模的计算公式 编辑:程序博客网 时间:2024/06/08 09:11
在编写薪水支付系统时有判断日期的需求,因此对java中涉及到日期的相关类进行总结。
java.util.Date
其中大多数方法已废弃,由Caledar以及DateFormat代替。
java.util.Caledar
实现日期与时间字段之间的转化
java.text.DateFormate
格式化、解析日期字符串
表示形式
年:y-1900
月:0-11表示,0表示1月
日:1-31表示
时:0-23表示
分:0-59表示
秒:0-61表示;(60、61涉及闰秒时表示)
日期工具类
package implement.util;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;/** * 日期工具类 * 1. * Created by ZD on 2017/11/28. */public class DatesUtil { //默认日期格式 public static final String DATE_DEFAULT_FORMAT = "yyyy-MM-dd"; //默认日期时间格式 public static final String DATETIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss"; //默认时间格式 public static final String TIME_DEFAULT_FORMAT = "HH:mm:ss"; //日期格式化 private static DateFormat dateFormat = null; //日期时间格式化 private static DateFormat datetimeFormat = null; //时间格式化 private static DateFormat timeFormat = null; private static Calendar calendar = null; /** * 初始化 */ static{ dateFormat = new SimpleDateFormat(DATE_DEFAULT_FORMAT); datetimeFormat = new SimpleDateFormat(DATETIME_DEFAULT_FORMAT); timeFormat = new SimpleDateFormat(TIME_DEFAULT_FORMAT); calendar = new GregorianCalendar(); } /** * 日期格式化 yyyy-MM-dd * @param date * @return */ public static String getDateFormat(Date date){ return dateFormat.format(date); } /** * 日期时间格式化 yyyy-MM-dd HH:mm:ss * @param date * @return */ public static String getDateTimeFormat(Date date){ return datetimeFormat.format(date); } /** * 时间格式化 HH:mm:ss * @param date * @return */ public static String getTimeFormat(Date date){ return timeFormat.format(date); } /** * 日期格式化 * @param date * @return */ public static Date getDateFormat(String date){ try { return dateFormat.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 日期时间格式化 * @param date * @return */ public static Date getDateTimeFormat(String date){ try { return datetimeFormat.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 时间格式化 * @param date * @return */ public static Date getTimeFormat(String date){ try { return timeFormat.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 获取当前日期 * @return */ public static Date getDate(){ return DatesUtil.getDateFormat(dateFormat.format(new Date())); } /** * 获取当前日期星期一日期 * @return */ public static Date getFirstDayOfWeek(){ calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()); return calendar.getTime(); } /** * 获取当前日期星期日日期 * @return */ public static Date getLastDayOfWeek(){ calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()+6); return calendar.getTime(); } /** * 获取指定日期中的星期一日期 * @param date * @return */ public static Date getFirstDayOfWeek(Date date){ if (date == null) return null; calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()); return calendar.getTime(); } /** * 获取给定日期所在星期的星期日日期 * @param date * @return */ public static Date getLastDayOfWeek(Date date){ if (date == null) return null; calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(date); calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek()+6); return calendar.getTime(); } /** * 获取当前月第一天日期 * @return */ public static Date getFirstDayOfMonth(){ calendar.set(Calendar.DAY_OF_MONTH,1); return calendar.getTime(); } /** * 获取当前月的最后一天 * @return */ public static Date getLastDayOfMonth(){ calendar.set(Calendar.DAY_OF_MONTH,1); calendar.add(Calendar.MONTH,1); calendar.add(Calendar.DAY_OF_MONTH,-1); return calendar.getTime(); } /** * 获取指定月的第一天 * @param date * @return */ public static Date getFirstDayOfMonth(Date date){ if (date == null) return null; calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH,1); return calendar.getTime(); } /** * 返回指定日期所在月的最后一天 * @param date * @return */ public static Date getLastDayOfMonth(Date date){ if (date == null) return null; calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH,1); calendar.add(Calendar.MONTH,1); calendar.add(Calendar.DAY_OF_MONTH,-1); return calendar.getTime(); } /** * 获取日期前一天 * @param date * @return */ public static Date getForwardDay(Date date){ if (date == null) return null; calendar.setTime(date); calendar.add(Calendar.DATE,-1); return calendar.getTime(); } /** * 获取日期后一天 * @param date * @return */ public static Date getNextDay(Date date){ if (date == null) return null; calendar.setTime(date); calendar.add(Calendar.DATE,1); return calendar.getTime(); } /** * 获取当前年份 * @return */ public static int getNowYear(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.YEAR); } /** * 获取当前月份 * @return */ public static int getNowMonth(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.MONTH)+1; } /** * 获取当前日期 * @return */ public static int getNowDay(){ Calendar calendar = Calendar.getInstance(); return calendar.get(Calendar.DATE); } /** * 获取当前星期 * @return */ public static String getNowWeek(){ Calendar calendar = Calendar.getInstance(); int week = calendar.get(Calendar.DAY_OF_WEEK); return "星期"+(week-1); } /** * 获取当月天数 * @return */ public static int getMonthDay(){ Calendar calendar = Calendar.getInstance(); return calendar.getActualMaximum(Calendar.DATE); } /** * 获取指定月天数 * @param date * @return */ public static int getMonthDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.getActualMaximum(Calendar.DATE); } /** * 获取时间段中的每一天 * @param startDate * @param endDate * @return */ public static List<Date> getEveryDayInDate(Date startDate, Date endDate){ if (startDate == null || endDate == null) return null; List<Date> dates = new ArrayList<Date>(); Calendar calendar = Calendar.getInstance(); calendar.setTime(startDate); dates.add(calendar.getTime()); while (calendar.getTime().compareTo(endDate) < 0){ calendar.add(Calendar.DAY_OF_MONTH,1); dates.add(calendar.getTime()); } return dates; } /** * 判定指定日期是不是周末 * @param date * @return */ public static boolean isWeekend(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int day = calendar.get(Calendar.DAY_OF_WEEK); if (day == 7 || day == 1) return true; return false; } public static void main(String[] args){ System.out.println("日期格式化:"+DatesUtil.getDateFormat(new Date())); System.out.println("日期时间格式化:"+DatesUtil.getDateTimeFormat(new Date())); System.out.println("时间格式化:"+DatesUtil.getTimeFormat(new Date())); System.out.println("获取当前日期:"+DatesUtil.getDate()); System.out.println("获取当前星期中星期一日期:"+DatesUtil.getFirstDayOfWeek()); System.out.println("获取当前星期中星期日日期:"+DatesUtil.getLastDayOfWeek()); System.out.println("获取指定日期所在星期的星期一日期:"+DatesUtil.getFirstDayOfWeek(DatesUtil.getDateFormat("2017-11-10"))); System.out.println("获取指定日期所在星期的星期日日期:"+DatesUtil.getLastDayOfWeek(DatesUtil.getDateFormat("2017-11-23"))); System.out.println("获取当前月中第一天日期:"+DatesUtil.getFirstDayOfMonth()); System.out.println("获取当前月中最后一天日期:"+DatesUtil.getLastDayOfMonth()); System.out.println("获取指定月的第一天日期:"+DatesUtil.getFirstDayOfMonth(DatesUtil.getDateFormat("2017-10-23"))); System.out.println("获取指定月的最后一天日期:"+DatesUtil.getLastDayOfMonth(DatesUtil.getDateFormat("2017-02-04"))); System.out.println("获取日期前一天:"+DatesUtil.getForwardDay(DatesUtil.getDateFormat("2017-03-12"))); System.out.println("获取日期后一天:"+DatesUtil.getNextDay(DatesUtil.getDateFormat("2017-05-14"))); System.out.println("获取当前年份:"+DatesUtil.getNowYear()); System.out.println("获取当前月份:"+DatesUtil.getNowMonth()); System.out.println("获取当前日期:"+DatesUtil.getNowDay()); System.out.println("获取当前星期:"+DatesUtil.getNowWeek()); System.out.println("获取当月天数:"+DatesUtil.getMonthDay()); System.out.println("获取指定月天数:"+DatesUtil.getMonthDay(DatesUtil.getDateFormat("2017-02-11"))); List<Date> dates = DatesUtil.getEveryDayInDate(DatesUtil.getDateFormat("2017-10-11"),DatesUtil.getDateFormat("2017-11-01")); for (Date date:dates){ System.out.println("获取时间段的每一天:"+DatesUtil.getDateFormat(date)); } System.out.println("判断某天是不是周末:"+DatesUtil.isWeekend(DatesUtil.getDateFormat("2017-11-27"))); }}
TimeStamp相关
package implement.util;import java.sql.Timestamp;/** * 与Date有关的瘦包装器,允许将JDBC API将该类标识为sql timestamp值。 * * Created by ZD on 2017/11/27. */public class TimeStampDesc { public static void main(String[] args){ /** * new Timestamp(long time) * 使用毫秒数值来构造Timestamp对象 */ Timestamp timestamp = new Timestamp(1511792658089L); Timestamp timestamp1 = new Timestamp(1511792658090L); /** * after(Timestamp ts) * before(Timestamp ts) * 判定此timestamp对象是否晚于/早于指定的timestamp对象 */ System.out.println("after():"+timestamp.after(timestamp1)); System.out.println("bofore():"+timestamp.before(timestamp1)); /** * compareTo(Timestamp ts) * 将此timestamp对象与给定timestamp对象进行比较 */ int compareTo = timestamp.compareTo(timestamp1); System.out.println("compareTo()"+compareTo); /** * getTime() * 返回自1970年1月1日00:00:00GMT以来的毫秒数 */ System.out.println("getNanos:"+timestamp1.getNanos()); System.out.println("getTime:"+timestamp1.getTime()); }}
Date相关
package implement.util;import java.util.*;/** * Calendar类功能描述 * * Created by ZD on 2017/11/22. */public class CalendarDesc { public static void main(String[] args){ GregorianCalendar gregorianCalendar = new GregorianCalendar(); /** * add(int field,int amout) * 为给定日历添加或减去指定的时间量 */ System.out.println("before add Calendar.MONTH:"+gregorianCalendar.get(Calendar.MONTH));// gregorianCalendar.add(Calendar.MONTH,-5);// System.out.println("after add Calendar.MONTH:"+gregorianCalendar.get(Calendar.MONTH)); /** * roll(int field,boolean up) * 在给定时间字段上添加或减去单个时间单元, */ gregorianCalendar.roll(Calendar.MONTH,true); System.out.println("after roll up Calendar.Month:"+gregorianCalendar.get(Calendar.MONTH)); gregorianCalendar.roll(Calendar.MONTH,false); System.out.println("after roll down Calendar.Month:"+gregorianCalendar.get(Calendar.MONTH)); /** * roll(int field,int amount) * 指定日历字段添加指定数量的值 */ System.out.println("before roll Calendar.Year:"+gregorianCalendar.get(Calendar.YEAR));// gregorianCalendar.roll(Calendar.YEAR,3);// System.out.println("after roll Calendar.Year:"+gregorianCalendar.get(Calendar.YEAR)); /** * 获得时区 */ System.out.println("get timezone:"+gregorianCalendar.getTimeZone()); /** * 判断日期时间解释是否宽松 * 如果宽松,类似可将32解释成下个月1号 * 如果不宽松,上序情况会报异常 */ System.out.println("is lenient"+gregorianCalendar.isLenient()); /** *setLenient(boolean lenient)设置是否宽松 */ gregorianCalendar.setLenient(true); /** * setFirstDayOfWeek(int value) * getFirstDayOfWeek() * 设置/获取一星期的第一天是哪一天 */ System.out.println("before setFirstDayOfWeek:"+gregorianCalendar.getFirstDayOfWeek());// gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);// System.out.println("after setFirstDayOfWeek:"+gregorianCalendar.getFirstDayOfWeek()); /** * getMinimalDaysInFirstWeek() * setMinimalDaysInFirstWeek(int value) * 设置/获取一年中第一个星期所需最少天数 */ System.out.println("before setMinimalDaysInFirstWeek:"+gregorianCalendar.getMinimalDaysInFirstWeek());// gregorianCalendar.setMinimalDaysInFirstWeek(7);// System.out.println("after setMinimalDaysInFirstWeek:"+gregorianCalendar.getMinimalDaysInFirstWeek()); /** * getMinmum(int field) * 返回Calendar实例给定日历字段的最小值 */ System.out.println("getMinimum:"+gregorianCalendar.getMinimum(Calendar.YEAR)); /** * getMaximum(int field) * 返回Calendar实例给定日历字段的最大值 */ System.out.println("getMaximum:"+gregorianCalendar.getMaximum(Calendar.DATE)); /** * getGreatestMinimum(int field) * 返回Calendar实例给定日历字段的最高的最小值 */ System.out.println("getGreatestMinimum:"+gregorianCalendar.getGreatestMinimum(Calendar.DATE)); /** * getLeastMaximum(int field) * 返回Calendar实例给定日历字段的最低的最大值 */ System.out.println("getLeastMaximum:"+gregorianCalendar.getLeastMaximum(Calendar.DATE)); /** * getActualMinimum(int field) * getActualMaximum(int field) * 返回指定日历字段可能拥有的最小/大值 */ System.out.println("getActualMinimum:"+gregorianCalendar.getActualMinimum(Calendar.MONTH)); System.out.println("getActualMaximum:"+gregorianCalendar.getActualMaximum(Calendar.DATE)); /** * after(Object when) * before(Object when) * 根据Calendar白搜狐IDE时间是否在指定Object表示的时间之后/之前 */ GregorianCalendar gregorianCalendar1 = new GregorianCalendar(2017,11,23); System.out.println("after():"+gregorianCalendar.after(gregorianCalendar1)); System.out.println("before():"+gregorianCalendar.before(gregorianCalendar1)); /** * clear() * clear(int field) * 将日历字段值或时间值全/某一字段设置为未定义 */// gregorianCalendar.clear(Calendar.YEAR);// gregorianCalendar.clear();// System.out.println("clear()"+gregorianCalendar.get(Calendar.YEAR));// System.out.println("clear(int field)"+gregorianCalendar.get(Calendar.YEAR)); /** * getTime() * getTimeInMills() * 返回date对象 */ System.out.println("getTime():"+gregorianCalendar.getTime()); System.out.println("getTimeInMills():"+gregorianCalendar.getTimeInMillis()); /** * isLeapYear(int year) * 判断给定年份是否为闰年 */ System.out.println("isLeapYear():"+gregorianCalendar.isLeapYear(gregorianCalendar.get(Calendar.YEAR))); }}
DateFormat相关
package implement.util;import java.text.DateFormat;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.*;import static java.text.DateFormat.*;import static java.text.DateFormat.FULL;import static java.text.DateFormat.LONG;/** * Created by ZD on 2017/11/22. */public class DateFormatDesc { /** * 测试 * @param args */ public static void main(String[] args){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); Date date = new Date(2017-1900,11-1,26); /** * format(Date date) * 将一个Date格式化为日期/时间字符串 */ String dates = simpleDateFormat.format(date); System.out.println("format():"+date); /** *format(Date date,StringBuffer toAppendTo,FiledPosotion fieldPostion) * 将一个Date格式化为日期/时间字符串,输出到字符缓冲区 */ /*SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); StringBuffer stringBuffer = simpleDateFormat.format(new Date(2017,11,30),new StringBuffer(), null);*/ /** * getAvailableLocals() * 返回所有语言环境的数组 */ Locale[] locales = DateFormat.getAvailableLocales(); for (Locale locale:locales){ System.out.print("local:"+locale.getCountry()+","); } System.out.println(); /** * getCalendar(),获取与此日期/时间格式关联的日历 */ Calendar calendar = simpleDateFormat.getCalendar(); System.out.println("calendar:"+calendar.getTime()); /** * getDateInstance() * 获取日期格式器,默认语言环境的默认格式风格 */ DateFormat dateFormat1 = DateFormat.getDateInstance(); String format1 = dateFormat1.format(date); System.out.println("默认格式风格:"+format1); /** * getDateInstance(int dateStyle),给定格式风格 */ DateFormat dateFormat2 = DateFormat.getDateInstance(SHORT); String format2 = dateFormat2.format(date); System.out.println("设置为short风格:"+format2); DateFormat dateFormat3 = DateFormat.getDateInstance(MEDIUM); String format3 = dateFormat3.format(date); System.out.println("设置为MEDIUM风格:"+format3); DateFormat dateFormat4 = DateFormat.getDateInstance(LONG); String format4 = dateFormat4.format(date); System.out.println("设置为LONG风格:"+format4); DateFormat dateFormat5 = DateFormat.getDateInstance(FULL); String format5 = dateFormat5.format(date); System.out.println("设置为FULL风格:"+format5); /** * getDateInstance(int dateStyle,Locale locale) * 给定语言,给定风格,格式化日期 */ DateFormat dateFormat6 = DateFormat.getDateInstance(FULL,Locale.ENGLISH); String format6 = dateFormat6.format(date); System.out.println("设置为FULL风格,语言环境为English:"+format6); /** * getDateTimeInstance() * 在默认语言、默认风格,格式化日期时间 */ DateFormat dateFormat7 = DateFormat.getDateTimeInstance(); String format7 = dateFormat7.format(new Date()); System.out.println("默认语言、默认风格下的日期时间格式器:"+format7); /** * getDateTimeInstance(int dateStyle,int timeStyle) * 给定日期风格、时间风格下的日期时间格式器 * dateStyle、timeStyle下各有四种风格 */ DateFormat dateFormat8 = DateFormat.getDateTimeInstance(LONG,SHORT); String format8 = dateFormat8.format(new Date()); System.out.println("给定日期风格,时间风格下的日期时间格式器:"+format8); /** * getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) * 给定日期风格、时间风格、所处语言环境下的日期时间格式器 */ DateFormat dateFormat9 = DateFormat.getDateTimeInstance(FULL,LONG,Locale.ENGLISH); String format9 = dateFormat9.format(new Date()); System.out.println("给定日期风格,时间风格以及所处语言环境下的日期时间格式器:"+format9); /** *setCalendar()设置日历 * getCalendar()获取日历 * 使用的默认语言环境下默认日历 */ simpleDateFormat.setCalendar(new GregorianCalendar()); Calendar calendar1 = simpleDateFormat.getCalendar(); System.out.println("获取日历:"+calendar1.getTime()); /** * setNumberFormat(),NumberFormat数值格式 * getNumberFormat() */ simpleDateFormat.setNumberFormat(new DecimalFormat()); NumberFormat numberFormat = simpleDateFormat.getNumberFormat(); long number = 20171126; System.out.println("获取numberFormat:"+numberFormat.format(number)); /** * getTimeZone()设定时区 */ TimeZone timeZone = simpleDateFormat.getTimeZone(); System.out.println("timeZone:"+timeZone.getDisplayName()); /** * isLenient()判断日期/时间解析是否严格 */ boolean islenient = simpleDateFormat.isLenient(); System.out.println("解析是否严格:"+islenient); }}
阅读全文
0 0
- 工具类-日期工具类
- 日期工具类
- 日期工具类
- 日期工具类
- java日期工具类
- 日期工具类
- 日期工具类
- 一个日期工具类
- 日期工具类
- java日期工具类
- flex 日期工具类
- 工具类:日期处理
- java 日期工具类
- 日期工具类
- 日期工具类DataTool
- Java日期工具类
- 日期工具类TimeUnit
- DateTool日期工具类
- 自定义TabLayout,实现神奇的选项卡效果
- loongson-2F 不能升级到 Debian Stretch
- SKULib 框架实现 annotation(2)
- kafka windows安装及测试
- 微信小程序滚动Tab选项卡:左右可滑动切换
- 日期工具类
- Java 命令行及SublimeText编译环境配置(二):涉及包的编译选项
- SpringBoot构建微服务实战 之 服务注册的快速打包
- make: `ob_default' is up to date.
- 跨平台RN开发的React规范(ES6)
- struts2 上传 excel 的 csv 文件
- 蛋蛋~~冒泡算法
- Xcode,删除mobileprovision编译文件
- 你缺少某方面的知识,你是需要付出时间或者金钱的代价的