以下内容摘自:  https://www.cnblogs.com/crazylqy/p/4172324.html

import java.sql.Timestamp;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class DateUtils {
protected static Log logger = LogFactory.getLog(DateUtils.class); // 格式:年-月-日 小时:分钟:秒
public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss"; // 格式:年-月-日 小时:分钟
public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm"; // 格式:年月日 小时分钟秒
public static final String FORMAT_THREE = "yyyyMMdd-HHmmss"; // 格式:年-月-日
public static final String LONG_DATE_FORMAT = "yyyy-MM-dd"; // 格式:月-日
public static final String SHORT_DATE_FORMAT = "MM-dd"; // 格式:小时:分钟:秒
public static final String LONG_TIME_FORMAT = "HH:mm:ss"; //格式:年-月
public static final String MONTG_DATE_FORMAT = "yyyy-MM"; // 年的加减
public static final int SUB_YEAR = Calendar.YEAR; // 月加减
public static final int SUB_MONTH = Calendar.MONTH; // 天的加减
public static final int SUB_DAY = Calendar.DATE; // 小时的加减
public static final int SUB_HOUR = Calendar.HOUR; // 分钟的加减
public static final int SUB_MINUTE = Calendar.MINUTE; // 秒的加减
public static final int SUB_SECOND = Calendar.SECOND; static final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四","星期五", "星期六" }; @SuppressWarnings("unused")
private static final SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public DateUtils() {} /**
* 把符合日期格式的字符串转换为日期类型
*
* @param dateStr
* @return
*/
public static java.util.Date stringtoDate(String dateStr, String format) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr);
} catch (Exception e) {
// log.error(e);
d = null;
}
return d;
} /**
* 把符合日期格式的字符串转换为日期类型
*/
public static java.util.Date stringtoDate(String dateStr, String format,
ParsePosition pos) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr, pos);
} catch (Exception e) {
d = null;
}
return d;
} /**
* 把日期转换为字符串
*
* @param date
* @return
*/
public static String dateToString(java.util.Date date, String format) {
String result = "";
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
result = formater.format(date);
} catch (Exception e) {
// log.error(e);
}
return result;
} /**
* 获取当前时间的指定格式
*
* @param format
* @return
*/
public static String getCurrDate(String format) {
return dateToString(new Date(), format);
} /**
*
* @param dateStr
* @param amount
* @return
*/
public static String dateSub(int dateKind, String dateStr, int amount) {
Date date = stringtoDate(dateStr, FORMAT_ONE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateKind, amount);
return dateToString(calendar.getTime(), FORMAT_ONE);
} /**
* 两个日期相减
*
* @param firstTime
* @param secTime
* @return 相减得到的秒数
*/
public static long timeSub(String firstTime, String secTime) {
long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
long second = stringtoDate(secTime, FORMAT_ONE).getTime();
return (second - first) / 1000;
} /**
* 获得某月的天数
*
* @param year
* int
* @param month
* int
* @return int
*/
public static int getDaysOfMonth(String year, String month) {
int days = 0;
if (month.equals("1") || month.equals("3") || month.equals("5")
|| month.equals("7") || month.equals("8") || month.equals("10")
|| month.equals("12")) {
days = 31;
} else if (month.equals("4") || month.equals("6") || month.equals("9")
|| month.equals("11")) {
days = 30;
} else {
if ((Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0)
|| Integer.parseInt(year) % 400 == 0) {
days = 29;
} else {
days = 28;
}
} return days;
} /**
* 获取某年某月的天数
*
* @param year
* int
* @param month
* int 月份[1-12]
* @return int
*/
public static int getDaysOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
} /**
* 获得当前日期
*
* @return int
*/
public static int getToday() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.DATE);
} /**
* 获得当前月份
*
* @return int
*/
public static int getToMonth() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.MONTH) + 1;
} /**
* 获得当前年份
*
* @return int
*/
public static int getToYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
} /**
* 返回日期的天
*
* @param date
* Date
* @return int
*/
public static int getDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
} /**
* 返回日期的年
*
* @param date
* Date
* @return int
*/
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
} /**
* 返回日期的月份,1-12
*
* @param date
* Date
* @return int
*/
public static int getMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
} /**
* 计算两个日期相差的天数,如果date2 > date1 返回正数,否则返回负数
*
* @param date1
* Date
* @param date2
* Date
* @return long
*/
public static long dayDiff(Date date1, Date date2) {
return (date2.getTime() - date1.getTime()) / 86400000;
} /**
* 比较两个日期的年差
*
* @param befor
* @param after
* @return
*/
public static int yearDiff(String before, String after) {
Date beforeDay = stringtoDate(before, LONG_DATE_FORMAT);
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(afterDay) - getYear(beforeDay);
} /**
* 比较指定日期与当前日期的差
*
* @param befor
* @param after
* @return
*/
public static int yearDiffCurr(String after) {
Date beforeDay = new Date();
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(beforeDay) - getYear(afterDay);
} /**
* 比较指定日期与当前日期的差
* @param before
* @return
*/
public static long dayDiffCurr(String before) {
Date currDate = DateUtils.stringtoDate(currDay(), LONG_DATE_FORMAT);
Date beforeDate = stringtoDate(before, LONG_DATE_FORMAT);
return (currDate.getTime() - beforeDate.getTime()) / 86400000; } /**
* 获取每月的第一周
* @param year
* @param month
* @return
*/
public static int getFirstWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天
c.set(year, month - 1, 1);
return c.get(Calendar.DAY_OF_WEEK);
} /**
* 获取每月的最后一周
* @param year
* @param month
* @return
*/
public static int getLastWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天
c.set(year, month - 1, getDaysOfMonth(year, month));
return c.get(Calendar.DAY_OF_WEEK);
} /**
* 获得当前日期字符串,格式"yyyy-MM-dd HH:mm:ss"
*
* @return
*/
public static String getNow() {
Calendar today = Calendar.getInstance();
return dateToString(today.getTime(), FORMAT_ONE);
} /**
* 根据生日获取星座
*
* @param birth
* YYYY-mm-dd
* @return
*/
public static String getAstro(String birth) {
if (!isDate(birth)) {
birth = "2000" + birth;
}
if (!isDate(birth)) {
return "";
}
int month = Integer.parseInt(birth.substring(birth.indexOf("-") + 1,
birth.lastIndexOf("-")));
int day = Integer.parseInt(birth.substring(birth.lastIndexOf("-") + 1));
String s = "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯";
int[] arr = { 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22 };
int start = month * 2 - (day < arr[month - 1] ? 2 : 0);
return s.substring(start, start + 2) + "座";
} /**
* 判断日期是否有效,包括闰年的情况
*
* @param date
* YYYY-mm-dd
* @return
*/
public static boolean isDate(String date) {
StringBuffer reg = new StringBuffer("^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");
reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");
reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");
reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");
reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");
reg.append("1-9])|(1[0-9])|(2[0-8]))))))");
Pattern p = Pattern.compile(reg.toString());
return p.matcher(date).matches();
} /**
* 取得指定日期过 months 月后的日期 (当 months 为负数表示指定月之前);
*
* @param date
* 日期 为null时表示当天
* @param month
* 相加(相减)的月数
*/
public static Date nextMonth(Date date, int months) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.MONTH, months);
return cal.getTime();
} /**
* 取得指定日期过 day 天后的日期 (当 day 为负数表示指日期之前);
*
* @param date
* 日期 为null时表示当天
* @param month
* 相加(相减)的月数
*/
public static Date nextDay(Date date, int day) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.DAY_OF_YEAR, day);
return cal.getTime();
} /**
* 取得距离今天 day 日的日期
* @param day
* @param format
* @return
* @author chenyz
*/
public static String nextDay(int day, String format) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, day);
return dateToString(cal.getTime(), format);
} /**
* 取得指定日期过 day 周后的日期 (当 day 为负数表示指定月之前)
*
* @param date
* 日期 为null时表示当天
*/
public static Date nextWeek(Date date, int week) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
}
cal.add(Calendar.WEEK_OF_MONTH, week);
return cal.getTime();
} /**
* 获取当前的日期(yyyy-MM-dd)
*/
public static String currDay() {
return DateUtils.dateToString(new Date(), DateUtils.LONG_DATE_FORMAT);
} /**
* 获取昨天的日期
*
* @return
*/
public static String befoDay() {
return befoDay(DateUtils.LONG_DATE_FORMAT);
} /**
* 根据时间类型获取昨天的日期
* @param format
* @return
* @author chenyz
*/
public static String befoDay(String format) {
return DateUtils.dateToString(DateUtils.nextDay(new Date(), -1), format);
} /**
* 获取明天的日期
*/
public static String afterDay() {
return DateUtils.dateToString(DateUtils.nextDay(new Date(), 1),
DateUtils.LONG_DATE_FORMAT);
} /**
* 取得当前时间距离1900/1/1的天数
*
* @return
*/
public static int getDayNum() {
int daynum = 0;
GregorianCalendar gd = new GregorianCalendar();
Date dt = gd.getTime();
GregorianCalendar gd1 = new GregorianCalendar(1900, 1, 1);
Date dt1 = gd1.getTime();
daynum = (int) ((dt.getTime() - dt1.getTime()) / (24 * 60 * 60 * 1000));
return daynum;
} /**
* getDayNum的逆方法(用于处理Excel取出的日期格式数据等)
*
* @param day
* @return
*/
public static Date getDateByNum(int day) {
GregorianCalendar gd = new GregorianCalendar(1900, 1, 1);
Date date = gd.getTime();
date = nextDay(date, day);
return date;
} /** 针对yyyy-MM-dd HH:mm:ss格式,显示yyyymmdd */
public static String getYmdDateCN(String datestr) {
if (datestr == null)
return "";
if (datestr.length() < 10)
return "";
StringBuffer buf = new StringBuffer();
buf.append(datestr.substring(0, 4)).append(datestr.substring(5, 7))
.append(datestr.substring(8, 10));
return buf.toString();
} /**
* 获取本月第一天
*
* @param format
* @return
*/
public static String getFirstDayOfMonth(String format) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
return dateToString(cal.getTime(), format);
} /**
* 获取本月最后一天
*
* @param format
* @return
*/
public static String getLastDayOfMonth(String format) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DATE, -1);
return dateToString(cal.getTime(), format);
} /**
* @desc: 获取系统 Timestamp,如(2014-12-18 17:35:46.651)
* @return Timestamp
*/
public static Timestamp getCurrentSysTimestamp(){
Timestamp d = new Timestamp(System.currentTimeMillis());
return d;
} //----------------------------------------以下是(Long和Date)(Long和yyyy-MM-dd)转换--------------------------------------------------- /**
* 获取当前时间的秒数 1970/01/01至今的秒数,,等于new Date().getTime()/1000
* @param date
* @return
* @throws Exception
*/
public static long getNowTimeStamp()
{
long stamp = 0L;
Date date1 = new Date();
Date date2 = null;
try {
date2 = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).parse("1970/01/01 08:00:00");
} catch (Exception e) {
e.printStackTrace();
}
stamp = (date1.getTime() - date2.getTime()) / 1000L;
return stamp;
} /**
* 获取当前时间的毫秒数 1970/01/01至今的毫秒数,等于new Date().getTime()
* @param date
* @return
* @throws Exception
*/
public static long getNowTimeStampMs(){
long stamp = 0L;
Date date1 = new Date();
Date date2 = null;
try {
date2 = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).parse("1970/01/01 08:00:00");
} catch (Exception e) {
e.printStackTrace();
}
stamp = (date1.getTime() - date2.getTime());
return stamp;
} /**
* 时间转换成秒 1970/01/01至今的秒数(Date转long),等于new Date().getTime()/1000
* @param date
* @return
* @throws Exception
*/
public static long getTimeStampByDate(Date date)
{
long stamp = 0L;
Date date1 = date;
Date date2 = null;
try {
date2 = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).parse("1970/01/01 08:00:00");
stamp = (date1.getTime() - date2.getTime()) / 1000L;
} catch (Exception e) {
stamp = 0L;
} return stamp;
} /**
* 时间转换成秒 1970/01/01至今的豪秒数(Date转long)
* @param date
* @return
* @throws Exception
*/
public static long getTimeStampMsByDate(Date date)
{
long stamp = 0L;
Date date1 = date;
Date date2 = null;
try {
date2 = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).parse("1970/01/01 08:00:00");
stamp = (date1.getTime() - date2.getTime());
} catch (Exception e) {
stamp = 0L;
} return stamp;
} /**
* 将时间由秒转换成指定格式,如(long转:yyyy-MM-dd HH:mm:ss)
* @param second
* @param format
* @return
* @throws Exception
*/
public static String getYYYYByTimeStamp(Long second, String format)
{
if(second==null||second==0){
return "";
}
Date da = null;
try {
da = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("1970-01-01 08:00:00");
} catch (Exception e) {
e.printStackTrace();
}
Date date = new Date(da.getTime() + second * 1000L);
return (new SimpleDateFormat(format)).format(date);
}
/**
* 将时间由毫秒转换成指定格式,如(long转:yyyy-MM-dd HH:mm:ss)
* @param second
* @param format
* @return
* @throws Exception
*/
public static String getYYYYbyTimeStampMs(Long second, String format)
{
if(second==null||second==0){
return "";
}
Date da = null;
try {
da = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("1970-01-01 08:00:00");
} catch (Exception e) {
e.printStackTrace();
}
Date date = new Date(da.getTime() + second );
return (new SimpleDateFormat(format)).format(date);
} /**
* 1970/01/01至今的秒数转换成Date
* @param TimeStamp
* @return
*/
public static Date getDateByTimeStamp(Long TimeStamp){
return new Date(TimeStamp*1000);
} /**
* 1970/01/01至今的豪秒数转换成Date
* @param TimeStampMs
* @return
*/
public static Date getDateByTimeStampMs(Long TimeStampMs){
return new Date(TimeStampMs);
}
}

Java 学习笔记 (三) Java 日期类型的更多相关文章

  1. Java学习笔记三:Java的变量、常量、变量的类型及使用规则

    Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...

  2. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  3. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  4. thinking in java学习笔记:14章 类型信息

    14.2 Class 对象 https://github.com/zhaojiatao/javase 1.什么是Class对象,Class对象是用来做什么的? Class对象是java程序用来创建类的 ...

  5. Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...

  6. Java 学习笔记(1)——java基础语法

    最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...

  7. Java学习笔记四:Java的八种基本数据类型

    Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...

  8. java 学习笔记1 java语言概述及开发环境

    高级语言运行机制 高级语言按程序的执行方式分为编译型和解释型两种. java语言比较特殊,Java程序的执行必须经过先编译后解释的步骤. 1 编译生成字节码,只面向JVM(.class) 2Jvm执行 ...

  9. JAVA学习笔记之JAVA 对象引用以及赋值

      关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没 ...

随机推荐

  1. mybatis中autoCommit自动提交事务

    今天学习了下mybatis, 对其中的autoCommit自动提交事务比较好奇, 研究了下,把配置和代码都放上 mapper.xml如下: <?xml version="1.0&quo ...

  2. tvtk管线技术、数据集与数据加载

    管线技术也称流水线技术(Pipeline)每个对象只实现相对简单的任务,整个管线进行复杂的可视化处理在tvtk中分为可视化管线和图形管线 可视化管线(Visualization Pipeline):将 ...

  3. 点击劫持漏洞之理解 python打造一个挖掘点击劫持漏洞的脚本

    前言: 放假了,上个星期刚刚学习完点击劫持漏洞.没来的及写笔记,今天放学总结了一下 并写了一个检测点击劫持的脚本.点击劫持脚本说一下哈.= =原本是打算把网站源码 中的js也爬出来将一些防御的代码匹配 ...

  4. Colossus: Successor to the Google File System (GFS)

    Colossus is the successor to the Google File System (GFS) as mentioned in the recent paper on Spanne ...

  5. flash 视频 死机(转贴)

    http://zhidao.baidu.com/question/120464366 打开有关flash的网站就定屏死机 打开flash的网站经常定屏死机,打开酷狗,看土豆网遇到旁边那些广告也一样死机 ...

  6. Aptana下Django1.6以后的项目模板结构改造

    Django1.6以后的manage.py放在项目包目录的根目录下,这种情况下在create app的app也在这个目录下面,由此可能导致app的名称有可能会和广大的内建包或者第三方包发生命名冲突,解 ...

  7. java.lang.SecurityException: Can't make field constructor accessible

    原本使用GsonConvertor,在Android版本5.1.1上没有任何问题,结果切换到版本6.0.1上,出现以下所示问题: java.lang.IllegalArgumentException: ...

  8. mysql distinct field1,field2,field3, .... from table

    mysql distinct field1,field2,field3, .... from table 我们知道 这样的sql可以去掉重复项 (field1的重复项); select distinc ...

  9. C#将一个枚举里面所有描述和value绑定到下拉列表的方法

    /// <summary> /// 获取枚举值的描述,如果没有描述,则返回枚举名称 /// </summary> /// <param name="en&quo ...

  10. CVE-2017-12149 JBOOS AS 6.X 反序列化漏洞利用

    检测目录: 返回500 一般就是存在了. 下载工具: http://scan.javasec.cn/java/JavaDeserH2HC.zip 使用方法: javac -cp .:commons-c ...