日期共通类实现

我们经常会遇到日期的处理需求,以下是工作中编写的日期共通类

package com.gomecar.index.common.utils;

import org.apache.log4j.Logger;
import org.springframework.util.StringUtils;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateUtil {

    private static Logger logger = Logger.getLogger(DateUtil.class);
    public static final String DATETIME = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE = "yyyy-MM-dd";

    public static String datetimeToStr(final Date date, final String format) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    public static String dateTimeToStr(final Date date) {
        return DateUtil.datetimeToStr(date, "yyyy-MM-dd HH:mm:ss");
    }

    public static String dateToStr(final Date date) {
        return DateUtil.datetimeToStr(date, "yyyy-MM-dd");
    }

    public static String dateToStr(final Date date, String format) {
        return DateUtil.datetimeToStr(date, format);
    }

    public static String getCurrentDate() {
        return new SimpleDateFormat(DATE).format(new Date());
    }

    public static String getCurrentDate(String format) {
        return new SimpleDateFormat(format).format(new Date());
    }

    public static String getCurrentDatetime() {
        return new SimpleDateFormat(DATETIME).format(new Date());
    }

    public static String getCurrentDatetime(String format) {
        return new SimpleDateFormat(format).format(new Date());
    }

    public static int getCurrentTimeHashCode() {
        return String.valueOf(System.currentTimeMillis()).hashCode();
    }

    /**
     * 获得当前时间当天的开始时间,即当前给出的时间那一天的00:00:00的时间
     *
     * @param date
     *            当前给出的时间
     * @return 当前给出的时间那一天的00:00:00的时间的日期对象
     */
    public static Date getDateBegin(final Date date) {
        SimpleDateFormat ymdFormat = new SimpleDateFormat("yyyy-MM-dd");
        if (date != null) {
            try {
                return DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.CHINA).parse(ymdFormat.format(date));
            } catch (ParseException e) {
                logger.error("DataFromat error");
            }
        }
        return null;
    }

    public static Date getDateEnd(Date date) {
        SimpleDateFormat ymdFormat = new SimpleDateFormat("yyyy-MM-dd");
        if (date != null) {
            try {
                Date endDate = strToDate(ymdFormat.format(new Date(date.getTime() + 24 * 60 * 60 * 1000)));
                endDate = new Date(endDate.getTime() - 1000);
                return endDate;
            } catch (Exception e) {
                logger.error("DataFromat error");
            }
        }
        return null;
    }

    public static long getNow() {
        return System.currentTimeMillis();
    }

    public static String getTime() {
        Date d = new Date();
        String re = datetimeToStr(d, "yyyyMMddHHmmssSSS");
        return re;
    }

    public static String getTime(String format) {
        Date d = new Date();
        String re = datetimeToStr(d, format);
        return re;
    }

    public static Date strToFormatDate(final String date, final String format) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(date, new ParsePosition(0));
    }

    public static Date strToDate(final String date) {
        return DateUtil.strToFormatDate(date, "yyyy-MM-dd");
    }

    public static final Date strToDate(final String dateStr, final String format) {
        return DateUtil.strToFormatDate(dateStr, format);
    }

    public static Date strToDateTime(final String date) {
        return DateUtil.strToFormatDate(date, "yyyy-MM-dd HH:mm:ss");
    }

    public static Date strToDateTime(final String date, final String format) {
        return DateUtil.strToFormatDate(date, format);
    }

    public static Timestamp strToTimestamp(String str) throws Exception {
        if (StringUtils.isEmpty(str)) {
            throw new Exception("转换错误");
        }
        if (str.trim().length() > 10) {
            return new Timestamp(new SimpleDateFormat(DATETIME).parse(str).getTime());
        } else {
            return new Timestamp(new SimpleDateFormat(DATE).parse(str).getTime());
        }
    }

    public static Timestamp strToTimestamp(String sDate, String sFormat) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
        Date t = sdf.parse(sDate);
        return new Timestamp(t.getTime());

    }

    public static boolean validateExpireDate(final long timeMillis, final long expireTimeMillis) {
        return (getNow() - timeMillis) > expireTimeMillis;
    }

    //秒换算成时分秒
    public static String secToTime(int time) {
        String timeStr = null;
        int hour = 0;
        int minute = 0;
        int second = 0;
        if (time <= 0)
            return "00:00";
        else {
            minute = time / 60;
            if (minute < 60) {
                second = time % 60;
                timeStr = unitFormat(minute) + ":" + unitFormat(second);
            } else {
                hour = minute / 60;
                if (hour > 99)
                    return "99:59:59";
                minute = minute % 60;
                second = time - hour * 3600 - minute * 60;
                timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + unitFormat(second);
            }
        }
        return timeStr;
    }
    public static String unitFormat(int i) {
        String retStr = null;
        if (i >= 0 && i < 10)
            retStr = "0" + Integer.toString(i);
        else
            retStr = "" + i;
        return retStr;
    }

    /**
     * 获取时间差
     * @param timeMillis
     * @return
     */
    public  static  String  getLastTime(long timeMillis){

        if (timeMillis<=0){
           return "-1";
        }
        String time="";
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d1 = df.parse(getYearMonthDayHourMinuteSecond(System.currentTimeMillis()+timeMillis));
            Date d2 = new Date();
            long date = d1.getTime() - d2.getTime();
            long day = date / (1000 * 60 * 60 * 24);
            long hour = (date / (1000 * 60 * 60) - day * 24);
            long min = ((date / (60 * 1000)) - day * 24 * 60 - hour * 60);
            long s = (date/1000 - day*24*60*60 - hour*60*60 - min*60);
            time = day+"天"+hour+"小时"+min+"分"+s+"秒";
            //System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
        }catch (Exception e) {
            return "-1";
        }
        return time;
    }

    public  static  String getYearMonthDayHourMinuteSecond(long timeMillis) {
        int timezone = 8; // 时区
        long totalSeconds = timeMillis / 1000;
        totalSeconds += 60 * 60 * timezone;
        int second = (int) (totalSeconds % 60);// 秒
        long totalMinutes = totalSeconds / 60;
        int minute = (int) (totalMinutes % 60);// 分
        long totalHours = totalMinutes / 60;
        int hour = (int) (totalHours % 24);// 时
        int totalDays = (int) (totalHours / 24);
        int _year = 1970;
        int year = _year + totalDays / 366;
        int month = 1;
        int day = 1;
        int diffDays;
        boolean leapYear;
        while (true) {
            int diff = (year - _year) * 365;
            diff += (year - 1) / 4 - (_year - 1) / 4;
            diff -= ((year - 1) / 100 - (_year - 1) / 100);
            diff += (year - 1) / 400 - (_year - 1) / 400;
            diffDays = totalDays - diff;
            leapYear = (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0);
            if (!leapYear && diffDays < 365 || leapYear && diffDays < 366) {
                break;
            } else {
                year++;
            }
        }

        int[] monthDays;
        if (diffDays >= 59 && leapYear) {
            monthDays = new int[] { -1, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
        } else {
            monthDays = new int[] { -1, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
        }
        for (int i = monthDays.length - 1; i >= 1; i--) {
            if (diffDays >= monthDays[i]) {
                month = i;
                day = diffDays - monthDays[i] + 1;
                break;
            }
        }
        return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
    }
}
时间: 2024-10-27 08:23:06

日期共通类实现的相关文章

Android请求网络共通类——Hi_博客 Android App 开发笔记

今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. 思路: 1.把请求网络的方法放到一个类里面 2.创建一个接口将数据发给Activity 3.Activity 实现接口获得服务器返回的数据 4.解析数据 来我们一先来看第一步 请求网络 在这里请求网络我们用Volley .Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健

JUnit套件测试(共通类测试)

@RunWith(Suite.class)@Suite.SuiteClasses({ TestClass1.class, TestClass2.class })public class SuiteTest {} @RunWith(Suite.class)@Suite.SuiteClasses({ TestClass3.class, TestClass5.class })public class TestClass1 {} @RunWith(Suite.class)@Suite.SuiteClas

材料管理框架:一个共通的viewModel搞定所有的分页查询

前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出来,再写查询时只要引入我共通的东西,再加上极少的代码就能完成.我个人比较崇尚代码简洁干净,有不合理的地方欢迎大家指出. 这篇文章主要介绍两个重点:1.前台viewModel的实现.2.后台服务端如何简洁的处理查询请求. 需求分析 查询页面要有哪些功能呢 1.有条件部输入查询条件(这个不打算做成共通的

一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)

前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出来,再写查询时只要引入我共通的东西,再加上极少的代码就能完成.我个人比较崇尚代码简洁干净,有不合理的地方欢迎大家指出. 这篇文章主要介绍两个重点:1.前台viewModel的实现.2.后台服务端如何简洁的处理查询请求. 需求分析 查询页面要有哪些功能呢 1.有条件部输入查询条件(这个不打算做成共通的

共通函数 波形图 鼠标事件

# -*- coding: utf8 -*- import sys import datetime import codecs import os from PyQt4 import QtGui, QtCore import PyQt4.Qwt5 as Qwt from PyQt4.Qwt5.anynumpy import * from PlotGraph import *#波形图 from CommonFun import *#共通函数 from Spy import *#鼠标事件 impor

一个共通的viewModel搞定所有的编辑页面-经典ERP录入页面(easyui + knockoutjs + mvc4.0)

http://www.cnblogs.com/xqin/archive/2013/06/06/3120887.html 前言 我写代码喜欢提取一些共通的东西出来,之前的一篇博客中说了如何用一个共通的viewModel和简洁的后台代码做查询页面,所有的查询页面都要对应一个数据录入的编辑及查看明细的页面,那么今天我们就来实现这个页面,同样我们也要使用一个共通的viewModel完成前台UI与JSON数据交互的处理,同样以超简洁的后台代码来处理保存. 需求分析 我们先弄明白我们要做怎么样一个编辑的页面

List排序共通代码

此共通方法可以根据特定字段进行排序 package com.gomecar.index.common.utils; import java.lang.reflect.Method; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * 对List中数据根据某个字段进行排序 * Created by xiaotian on 2017/3/20. */ public class

java日期比较工具类

package com.net.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException; /** * 日期比较工具类 * @author zhangdi * */ public class DateUtil { /** *

C# 常用日期类型转换帮助类

本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html 最近工作比较忙,与此同时自己也在业余时间开发一个电子商务网站.虽然每天都很累,但感觉过的相当充实.由于时间紧张,最近没有经常来园子,只是有人留言的时候过来回复下.今天过来刷刷存在感. 二.应用场景举例 1.按指定日期查询 (1)用户在UI上选择日期; (2)系统计算出今天的起始时间(****年**月**日 00:00:00)和今天的结束时间(****年**月**日 23:59:59);