[工具類-DataUtils]java項(xiàng)目中的時(shí)間工具類

平時(shí)在項(xiàng)目開發(fā)中可能很多地方需要處理時(shí)間問題的方法,這里總結(jié)一些常用的時(shí)間方法:

圖片來自簡書app

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * @Description <日期工具類>
 * @author liwang
 * @date 2017年11月14日
 * @version
 */
public class DateUtil {

    /**
     * 根據(jù)時(shí)間字符串獲取日期
     * @param dataStr   時(shí)間字符串
     * @return          日期
     */
    public static Date tranStrToDate(String dataStr) {
        try {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return format.parse(dataStr);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 根據(jù)傳入時(shí)間轉(zhuǎn)換為毫秒值橄维,附加納秒后六位
     * @param dateTime 日期
     * @return String
     * @throws ParseException 異常
     */
    public static String getTimeToNanos(String dateTime) throws ParseException {
        Calendar c = Calendar.getInstance();
        c.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateTime));
        Long curNanos = Math.abs(System.nanoTime());
        String nanos = curNanos.toString();
        return c.getTimeInMillis() + nanos.substring(nanos.length() - 6);
    }

    /**
     * 根據(jù)傳入的毫秒值轉(zhuǎn)換為yyyy-MM-dd HH:mm:ss的日期字符串
     * @param dateTime 日期
     * @return String
     */
    public static String getDateStrByTimeMillis(long dateTime) {
        Date date = new Date(dateTime);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 獲取當(dāng)前日期
     * @return      當(dāng)前日期梧田,格式:yyyy-MM-dd
     */
    public static String getCurDate() {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        return format.format(new Date());
    }

    /**
     * 獲取當(dāng)前時(shí)間
     * @return      當(dāng)前時(shí)間蹂午,格式:yyyy-MM-dd HH:mm:ss
     */
    public static String getCurTime() {
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format.format(new Date());
    }

    /**
     * 獲取系統(tǒng)當(dāng)前默認(rèn)時(shí)區(qū)與指定時(shí)區(qū)的時(shí)間差.(單位:毫秒)
     * @param timeZoneId 時(shí)區(qū)Id
     * @param time 時(shí)間
     * @return 系統(tǒng)當(dāng)前默認(rèn)時(shí)區(qū)與指定時(shí)區(qū)的時(shí)間差.(單位:毫秒)
     */
    public static long getDiffTimeZoneRawOffset(String timeZoneId, long time) {
        long diffTime = TimeZone.getDefault().getRawOffset() - TimeZone.getTimeZone(timeZoneId).getRawOffset();
        long curTime = System.currentTimeMillis();
        return time - curTime + diffTime;
    }

    /**
     * 獲取當(dāng)天結(jié)束時(shí)間
     * @return  毫秒數(shù)
     */
    public static Long getEndTime() {
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.AM_PM, 0);
        todayEnd.set(Calendar.HOUR, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        todayEnd.set(Calendar.MILLISECOND, 999);
        return todayEnd.getTime().getTime();
    }

    /**
     * 添加日期
    * @author 
    * @date 
    * @param dateTime 時(shí)間
    * @param days 天
    * @return String
     */
    public static String addDays(String dateTime, int days) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar date = Calendar.getInstance();
            date.setTime(sdf.parse(dateTime));
            date.set(Calendar.DATE, date.get(Calendar.DATE) + days);
            return sdf.format(date.getTime());
        }
        catch (Exception e) {
            return dateTime;
        }
    }

    /**
     * 添加秒
    * @author 
    * @date 
    * @param dateTime 時(shí)間
    * @param secondes 秒
    * @return String
     */
    public static String addSecondes(String dateTime, int secondes) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar date = Calendar.getInstance();
            date.setTime(sdf.parse(dateTime));
            date.set(Calendar.SECOND, date.get(Calendar.SECOND) + secondes);
            return sdf.format(date.getTime());
        }
        catch (Exception e) {
            return dateTime;
        }
    }

    /**
     * 
    * @author 
    * @date 
    * @param startTime 開始時(shí)間
    * @return long
     */
    public static long getDiffTimeByNow(String startTime) {
        return getDiffTime(startTime, null);
    }

    /**
     * 
    * @author 
    * @date 
    * @param startTime 開始時(shí)間
    * @param endTime 結(jié)束時(shí)間
    * @return long
     */
    public static long getDiffTime(String startTime, String endTime) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startDate = sdf.parse(startTime);
            Date endDate = null;
            if (StringUtil.isNotEmpty(endTime)) {
                endDate = sdf.parse(endTime);
            }
            else {
                endDate = new Date();
            }
            return startDate.getTime() - endDate.getTime();
        }
        catch (Exception e) {
            return 0;
        }
    }

    /**
     * 解析時(shí)間戳
    * @author 
    * @date 
    * @param time 時(shí)間
    * @return String
     */
    public static String timestampFormat(String time) {
        String yyyy = time.substring(0, 4);
        String mm = time.substring(4, 6);
        String dd = time.substring(6, 8);
        String hh = time.substring(8, 10);
        String min = time.substring(10, 12);
        String ss = time.substring(12, 14);
        return yyyy + "-" + mm + "-" + dd + " " + hh + ":" + min + ":" + ss;
    }

    /**
     * 
    * @author 獲得指定日期之前天數(shù)的日期
    * @date 
    * @param d 日期
    * @param day 天
    * @return Date
     */
    public static Date getDateDaysBefore(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        // now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
        now.add(Calendar.DATE, -day);
        return now.getTime();
    }

    /**
     * 獲取指定日期之后多少天的日期
    * @author 
    * @date 
    * @param d 日期
    * @param day 天
    * @return Date
     */
    public static Date getDateDaysAfter(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        // now.set(Calendar.DATE, now.get(Calendar.DATE) + day);
        now.add(Calendar.DATE, day);
        return now.getTime();
    }

    /**
     * 
    * @author 獲取指定時(shí)間窑业,之前幾個(gè)月前的時(shí)間
    * @date 
    * @param d 日期
    * @param month 月份
    * @return Date
     */
    public static Date getDateMonthsBefore(Date d, int month) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        // now.set(Calendar.DATE, now.get(Calendar.MONTH) - month);
        now.add(Calendar.MONTH, -month);
        return now.getTime();
    }

    /**
     * 獲取指定時(shí)間,之后幾個(gè)月后的時(shí)間
    * @author 
    * @date 
    * @param d 日期
    * @param month 月份
    * @return Date
     */
    public static Date getDateMonthsAfter(Date d, int month) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        // now.set(Calendar.DATE, now.get(Calendar.MONTH) + month);
        now.add(Calendar.MONTH, month);
        return now.getTime();
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市遭垛,隨后出現(xiàn)的幾起案子尼桶,更是在濱河造成了極大的恐慌,老刑警劉巖锯仪,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泵督,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庶喜,警方通過查閱死者的電腦和手機(jī)小腊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來久窟,“玉大人秩冈,你說我怎么就攤上這事〕饪福” “怎么了入问?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稀颁。 經(jīng)常有香客問我芬失,道長,這世上最難降的妖魔是什么匾灶? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任棱烂,我火速辦了婚禮,結(jié)果婚禮上阶女,老公的妹妹穿的比我還像新娘颊糜。我一直安慰自己,他們只是感情好秃踩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布衬鱼。 她就那樣靜靜地躺著,像睡著了一般憔杨。 火紅的嫁衣襯著肌膚如雪馁启。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天芍秆,我揣著相機(jī)與錄音,去河邊找鬼翠勉。 笑死妖啥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的对碌。 我是一名探鬼主播荆虱,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了怀读?” 一聲冷哼從身側(cè)響起诉位,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菜枷,沒想到半個(gè)月后苍糠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啤誊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年岳瞭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚊锹。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞳筏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牡昆,到底是詐尸還是另有隱情姚炕,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布丢烘,位于F島的核電站柱宦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铅协。R本人自食惡果不足惜捷沸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狐史。 院中可真熱鬧痒给,春花似錦、人聲如沸骏全。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姜贡。三九已至试吁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楼咳,已是汗流浹背熄捍。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留母怜,地道東北人余耽。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像苹熏,于是被迫代替她去往敵國和親碟贾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币喧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評(píng)論 25 707
  • 先說項(xiàng)目開發(fā)過程中團(tuán)隊(duì)人員的分工協(xié)作。 一 人員安排 畢業(yè)至今的大部分項(xiàng)目都是獨(dú)立完成袱耽,雖然也有和其他同事協(xié)作的時(shí)...
    SnowflakeCloud閱讀 10,749評(píng)論 3 59
  • 前言 本文適合有OC基礎(chǔ)或者對(duì)iOS開發(fā)有一點(diǎn)了解的同學(xué)杀餐,特別是一直在用OC開發(fā)想轉(zhuǎn)Swift的同學(xué),因?yàn)槲冶旧硎?..
    cmfish閱讀 288評(píng)論 0 3
  • 不知道從什么時(shí)候開始朱巨,喜歡上了旅行史翘。旅行對(duì)于我來說,不是出發(fā)蔬崩,而是離開恶座,離開一些束縛,離開一些煩惱沥阳。路上陣...
    超三少閱讀 192評(píng)論 0 0