日期格式转化工具类(添加获取网络时间方法)

在原有的基础上增加获取网络时间方法。获取网络时间的方法来自于:http://blog.csdn.net/catoop/article/details/50076879

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by zhangss on 2017/8/24.
 */
public class DateUtil {
    // 默认日期格式
    private static String defaultDatePattern = "yyyy-MM-dd HH:mm:ss";
    public static SimpleDateFormat dateFormatter = new SimpleDateFormat(defaultDatePattern);
    private static String TIME_URL_BAIDU = "http://www.baidu.com";
    private static String TIME_URL_TAOBAO = "http://www.taobao.com";
    private static String TIME_URL_NTSC = "http://www.ntsc.ac.cn";

    /**
     * 获取默认的数据格式
     *
     * @return String
     * */
    public static String getDefaultDatePattern() {
        return defaultDatePattern;
    }

    /**
     * 返回预设Format的当前日期字符串
     *
     * @return String 默认格式
     */
    public static String getToday() {
        Date today = new Date();
        return format(today);
    }
    /**
     * 获取格式化后的当前日期
     *
     * @param pattern 日期格式
     *
     * @return Date
     * */
    public static Date getTodyByPattern(String pattern) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        return DateUtil.string2Date(df.format(new Date()), pattern);
    }
    /**
     * 使用默认Format格式化Date成字符串
     *
     * @param date
     *
     * @return String 使用默认格式
     */
    public static String format(Date date) {
        return format(date, getDefaultDatePattern());
    }

    /**
     * 使用参数Format格式化Date成字符串
     *
     * @param date
     * @param pattern
     *
     * @return String 使用用户传入的格式
     */
    public static String format(Date date, String pattern) {
        String returnValue = "";
        if (date != null) {
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            returnValue = df.format(date);
        }
        return (returnValue);
    }

    /**
     * 将字符串转为Date
     *
     * @param strDate 时间字符串
     * @param pattern 时间格式
     *
     * @return Date
     */
    public static Date string2Date(String strDate, String pattern) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        try {
            return df.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将Date串转为新格式的Date
     *
     * @param strDate 时间字符串
     * @param pattern 时间格式
     *
     * @return Date
     */
    public static Date date2Date(Date strDate, String pattern) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        try {
            return df.parse(df.format(strDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 根据所传的格式,格式化想要处理的date 格式
     *
     * @param date
     * @param pattern
     *
     * @return String
     */
    public static String dateFormatterByPattern(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        if (date != null) {
            return sdf.format(date);
        } else {
            return sdf.format(new Date());
        }
    }

    /**
     * 比较两个日期的前后,前面的日期在后,则为true
     *
     * @param date1
     * @param date2
     *
     * @return boolean
     */
    public static boolean equals(Date date1, Date date2) {
        return date1.getTime() >= date2.getTime();
    }

    /**
     * 比较两个日期的前后,前面的日期在后,则为true
     *
     * @param date1
     * @param date2
     *
     * @return boolean
     */
    public static boolean isDateAfter(Date date1, Date date2) {
        return date1.getTime() >= date2.getTime();
    }

    /**
     * 是否过期,过期true,未过期false
     *
     * @param endTime
     *
     * @return boolean
     */
    public static boolean isGuoqi(Date endTime) {
        Date today = new Date();
        return today.getTime() > endTime.getTime();
    }

    /**
     * 比较两个日期字符串的先后,前面的日期在后,则为true
     *
     * @param date1
     * @param date2
     *
     * @return boolean
     */
    public static boolean isDateAfter(String date1, String date2, String pattern) {
        Date datea = toCalendar(date1, pattern).getTime();
        Date dateb = toCalendar(date2, pattern).getTime();
        return DateUtil.isDateAfter(datea, dateb);
    }

    /**
     * 比较当前日期和传入日期的先后
     *
     * @param date
     *
     * @return boolean
     * */
    public static boolean isDateInvalidation(Date date) {
        Date date2 = new Date();
        return DateUtil.isDateAfter(date2, date);
    }

    /**
     * 从一个日期字符串中取出它的年份
     *
     * @param strDate
     * @param pattern
     *
     * @return int
     */
    public static final Integer getYear(String strDate, String pattern) {
        pattern = "".equals(pattern) ? defaultDatePattern : pattern;
        Calendar cale = toCalendar(strDate, pattern);
        if (cale == null) {
            return -1;
        }
        return cale.get(Calendar.YEAR);
    }

    /**
     * 从一个日期字符串中取出它的月份
     *
     * @param strDate
     * @param pattern
     *
     * @return int
     */
    public static final int getMonth(String strDate, String pattern) {
        pattern = "".equals(pattern) ? defaultDatePattern : pattern;
        Calendar cale = toCalendar(strDate, pattern);
        if (cale == null) {
            return -1;
        }
        return cale.get(Calendar.MONTH) + 1;
    }

    /**
     * 从一个日期字符串中取出它的日期
     *
     * @param strDate
     * @param pattern
     *
     * @return int
     */
    public static final int getDate(String strDate, String pattern) {
        pattern = "".equals(pattern) ? defaultDatePattern : pattern;
        Calendar cale = toCalendar(strDate, pattern);
        if (cale == null) {
            return -1;
        }
        return cale.get(Calendar.DATE);
    }

    /**
     * 把一个日期字符串转换成Calendar形式
     *
     * @param strDate
     * @param pattern
     *
     * @return Calendar
     */
    private static final Calendar toCalendar(String strDate, String pattern) {
        pattern = "".equals(pattern) ? defaultDatePattern : pattern;
        Calendar cale = null;
        try {
            Date thisDate = string2Date(strDate, pattern);
            cale = Calendar.getInstance();
            cale.setTime(thisDate);
        } catch (Exception e) {
            return null;
        }
        return cale;
    }

    /**
     * 返回昨天的日期字符串
     *
     * @param pattern
     *
     * @return String
     */
    public static final String getYesday(String pattern) {
        Date date = getTodyByPattern(pattern);
        String strDate = format(date, pattern);
        Calendar cale = toCalendar(strDate, pattern);
        cale.add(Calendar.DAY_OF_YEAR, -1);
        return dateFormatterByPattern(cale.getTime(), pattern);

    }

    /**
     * 计算出strDate之后days天后的日期字符串 days可以为负数
     *
     * @param strDate yyyy-MM-dd
     * @param days
     *
     * @return String
     */
    public static final String addDayToString(String strDate, int days) {
        Calendar cale = toCalendar(strDate, defaultDatePattern);
        cale.add(Calendar.DAY_OF_YEAR, days);
        return dateFormatterByPattern(cale.getTime(), defaultDatePattern);
    }

    /**
     * 此函数计算出date之后days天后的日期,days可以是负数
     *
     * @param days
     * @return
     */
    public static final Date addDay(Date date, int days) {
        Calendar cale = Calendar.getInstance();
        cale.setTime(date);
        cale.add(Calendar.DAY_OF_YEAR, days);
        return cale.getTime();
    }

    /**
     * 指定日期之后moths个月的日期,Months可以是负数
     *
     * @param date
     * @param months
     *
     * @return Date
     */
    public static final Date addMonth(Date date, int months) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, months);
        return cal.getTime();
    }

    /**
     * 计算出指定日期之后moths个月的日期,Months可以是负数
     *
     * @param strDate
     * @param months
     *
     * @return
     */
    public static final String addMonth(String strDate, int months) {
        Date date;
        try {
            date = dateFormatter.parse(strDate);
        } catch (ParseException e) {
            return null;
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, months);
        return dateFormatterByPattern(cal.getTime(), "yyyy-MM-dd");
    }

    /**
     * 获取2个日期间相差的天数
     *
     * @param date1
     * @param date2
     *
     * @return int
     * */
    public static final int getDays(Date date1, Date date2) {
        Long days = date1.getTime() - date2.getTime();
        return (int) (days / 1000 / 3600 / 24);
    }

    /**
     * 获取2个日期间相差的分钟数
     *
     * @param date1
     * @param date2
     *
     * @return int
     * */
    public static final int getMinute(Date date1, Date date2) {
        Long days = date1.getTime() - date2.getTime();
        return (int) (days / 1000 / 60);
    }

    /**
     * 计算传入的日期是星期几
     *
     * @param date
     *
     * @return int
     */
    public static int getWeek(Date date){
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int day = c.get(Calendar.DAY_OF_WEEK);
        if(day == 1){
            return 7;
        }else{
            return day-1;
        }
    }

    /**
     * 根据日期算出这一周的日期
     *
     * @param date
     *
     * @return List<Date>
     */
    public static List<Date> dateToWeek(Date date){
        int b=DateUtil.getWeek(date);
        Date fdate ;
        List<Date> list = new ArrayList<Date>();
        Long fTime=date.getTime()-b*24*3600000;
        for(int a=0;a<8;a++){
            fdate= new Date();
            fdate.setTime(fTime+(a*24*3600000));
            list.add(a, fdate);
        }
        return list;
    }

    /**
     * 根据日期计算出星期一的日期
     *
     * @param date
     * @throws ParseException
     *
     * @return String
     */
    public static String getMonday(String date){
        return DateUtil.format(DateUtil.dateToWeek(DateUtil.string2Date(date, defaultDatePattern)).get(1));
    }

    /**
     * 根据日期计算出星期天的日期
     *
     * @param date
     * @throws ParseException
     *
     * @return String
     */
    public static String getSunDay(String date){
        List<Date> dates;
        dates = DateUtil.dateToWeek(DateUtil.string2Date(date, defaultDatePattern));
        return DateUtil.format(dates.get(dates.size()-1));
    }

    /**
     * 根据日期得出第二天日期
     *
     * @param date
     *
     * @return String
     */
    @SuppressWarnings("static-access")
    public static String getTomrrow(Date date){
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
        return DateUtil.format(calendar.getTime()); //这个时间就是日期往后推一天的结果
    }

    /**
     * 根据日期得出前一天日期
     *
     * @throws ParseException
     *
     * @return String
     */
    @SuppressWarnings("static-access")
    public static String getYesterday(Date date){
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE,-1);//把日期往后增加一天.整数往后推,负数往前移动
        return DateUtil.format(calendar.getTime()); //这个时间就是日期往后推一天的结果
    }

    /**
     * 获取下一分钟的格式化字符串
     *   格式yyyy-MM-dd HH:mm:ss
     * @Param date
     * @return String
     * */
    public static String getNextMin(Date date){
        date = new Date(date.getTime() + 1000*60);
        return format(date);
    }
    /**
     * 获取下一分钟的格式化字符串
     *   格式需要传入
     * @Param date
     * @param pattern
     * @return String
     * */
    public static String getNextMin(Date date, String pattern){
        date = new Date(date.getTime() + 1000*60);
        return format(date, pattern);
    }
    /**
     * 获取下一分钟的格式化字符串
     *   格式需要传入
     * @Param dateStr
     * @param pattern
     * @return String
     * */
    public static String getNextMin(String dateStr, String pattern){
        Date nDate = string2Date(dateStr, pattern);
        nDate = new Date(nDate.getTime() + 1000*60);
        return format(nDate, pattern);
    }
   
    /**
     * 获取指定网站的日期时间
     * 
     * @param webUrl
     * @param pattern
     */
    private static String getWebsiteDatetime(String webUrl, String pattern){
        try {
            URL url = new URL(webUrl);// 取得资源对象
            URLConnection uc = url.openConnection();// 生成连接对象
            uc.connect();// 发出连接
            long ld = uc.getDate();// 读取网站日期时间
            Date date = new Date(ld);// 转换为标准时间对象
            SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.CHINA);// 输出北京时间
            return sdf.format(date);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getBAIDUTime(){
        return getWebsiteDatetime(TIME_URL_BAIDU, defaultDatePattern);
    }
    public static String getNTSCTime(){
        return getWebsiteDatetime(TIME_URL_NTSC, defaultDatePattern);
    }
    public static String getTAOBAOTime(){
        return getWebsiteDatetime(TIME_URL_TAOBAO, defaultDatePattern);
    }
    public static String getBAIDUTime(String pattern){
        return getWebsiteDatetime(TIME_URL_BAIDU, pattern);
    }
    public static String getNTSCTime(String pattern){
        return getWebsiteDatetime(TIME_URL_NTSC, pattern);
    }
    public static String getTAOBAOTime(String pattern){
        return getWebsiteDatetime(TIME_URL_TAOBAO, pattern);
    }
    public static void main(String[] args){
        DateUtil util = new DateUtil();
        System.out.println(new Date());
        System.out.println(util.getToday());
        System.out.println(util.format(new Date()));
        Date startDate = new Date(2017-1900, 7, 24, 14,0);
        Date endDate = new Date(2017-1900, 7, 26, 14,0);
        System.out.println(getMinute( endDate, startDate)/3);
    }
}

 

posted @ 2017-04-24 11:17  xiaoss  阅读(454)  评论(0编辑  收藏  举报