1. 程式人生 > >工具類:時間和日期的獲取

工具類:時間和日期的獲取

public class DateUtil {

    public static final String DATE_FORMAT = "yyyy-MM-dd";
    private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
    private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");

    /**
     * 獲取當前時間
     */
    public static long getCurrentTime() {
        try {
            return SystemClock.elapsedRealtime();
        } catch (Exception var3) {
            var3.printStackTrace();
            return System.currentTimeMillis();
        }
    }

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


    /**
     * 獲取今天(yyyy-MM-dd)的時間戳
     */
    public static long getCurrentDate(Context context) {
        String currentTime = DateUtil.getCurrentTime(DateUtil.DATE_FORMAT);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date currentDate = df.parse(currentTime);
            return currentDate.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date().getTime();
    }

    /**
     * 獲取某年第一天日期
     */
    public static Date getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return currYearFirst;
    }

    /**
     * 獲取某年最後一天日期
     */
    public static Date getYearLast(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        Date currYearLast = calendar.getTime();

        return currYearLast;
    }

    /**
     * 獲取當前時間所在年的週數
     */
    public static int getWeekOfYear(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setMinimalDaysInFirstWeek(7);
        c.setTime(date);

        return c.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 獲取當前時間所在年的最大週數
     */
    public static int getMaxWeekNumOfYear(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
        return getWeekOfYear(c.getTime());
    }

    /**
     * 獲取某年的第幾周的開始日期
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        Calendar c = getFirstDayOfWeek(year);
        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getFirstDayOfWeek(cal.getTime());
    }

    /**
     * 獲取某年的第幾周的結束日期
     */
    public static Date getLastDayOfWeek(int year, int week) {
        Calendar c = getFirstDayOfWeek(year);
        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getLastDayOfWeek(cal.getTime());
    }

    /**
     * 獲取一年開始的第一週的週一
     * 第一週如果有四天或以上就算是該年的第一週,
     * 否則就是上一年的最後一週(用於跨年判斷第一週開始時間)
     */
    public static Calendar getFirstDayOfWeek(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.JANUARY, 1, 0, 0, 0);
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
        // 如果1月1日是週五,週六或者週日,那麼這一週是上一年最後一週,重新計算今年的第一週開始的週一
        if (dayOfWeek == Calendar.FRIDAY || dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
                c.add(Calendar.DAY_OF_YEAR, 1);
            }
        }
        return c;
    }

    /**
     * 獲取當前時間所在周的開始日期
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
        return c.getTime();
    }

    /**
     * 獲取當前時間所在周的結束日期
     */
    @SuppressLint("WrongConstant")
    public static Date getLastDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
        return c.getTime();
    }

    /**
     * 判斷該年的最後一天(xxxx年12月31日)所在的周是不是當年的最後一週,
     * 否則就是下一年的第一週
     */
    public static boolean isLastDayInYearLastWeek(Date lastDate) {
        boolean result = false;
        Calendar c = new GregorianCalendar();
        c.setTime(lastDate);
        int lastDay = c.get(Calendar.DAY_OF_WEEK);
        // 當lastDay是週四、五、六、日, 它所在周就是是該年的最後一週
        if (lastDay == Calendar.THURSDAY || lastDay == Calendar.FRIDAY || lastDay == Calendar.SATURDAY || lastDay == Calendar.SUNDAY) {
            result = true;
        }
        return result;
    }

    /**
     * 獲取一年的最後一天
     */
    public static Date getLastDayOfYear(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 0, 0, 0);
        return c.getTime();
    }

    /**
     * 判斷當前時間是否在[startTime, endTime]區間,注意時間格式要一致
     */
    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (Math.abs(nowTime.getTime() - startTime.getTime()) < 1000 ||
                Math.abs(nowTime.getTime() - endTime.getTime()) < 1000) {
            return true;
        }

        Calendar date = new GregorianCalendar();
        date.setTime(nowTime);

        Calendar begin = new GregorianCalendar();
        begin.setTime(startTime);

        Calendar end = new GregorianCalendar();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 獲取一年第一週的第一天 和 最後一週的最後一天
     */
    public static Date[] getYearMinDayAndMasDay(int currentYear) {
        Date[] resultDate = new Date[2];
        List<Week> weeks = getWeeksByYear(currentYear);
        Week week0 = weeks.get(0);
        Week week1 = weeks.get(weeks.size() - 1);
        Date minDate = week0.getWeekBeginDate();
        Date maxDate = week1.getWeekEndDate();
        resultDate[0] = minDate;
        resultDate[1] = maxDate;
        return resultDate;
    }

    /**
     * 根據當前日期算出所在周的開始時間和結束時間
     */
    public static String[] getWeekStartAndEndDay(Date currentDate) {
        String[] weekDay = new String[2];
        Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentDate);
        Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentDate);
        weekDay[0] = sdf2.format(firstDayOfWeek.getTime());
        weekDay[1] = sdf2.format(lastDayOfWeek.getTime());
        return weekDay;
    }

    /**
     * 獲取一年中每週的範圍
     */
    public static List<Week> getWeeksByYear(int currentYear) {
        ArrayList<Week> weekList = new ArrayList<>();
        Date lastDay = DateUtil.getLastDayOfYear(currentYear);
        boolean result = DateUtil.isLastDayInYearLastWeek(lastDay);
        // 一年最多有53個星期
        for (int i = 0; i < 53; i++) {
            Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentYear, i);
            Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentYear, i);

            Calendar startCal = Calendar.getInstance();
            startCal.setTime(firstDayOfWeek);
            Calendar endCal = Calendar.getInstance();
            endCal.setTime(lastDayOfWeek);
            String WeekNumStr = String.valueOf(i + 1);
            if (i < 9) {
                WeekNumStr = "0" + (i + 1);
            }
            Week everyWeek = new Week();
            everyWeek.setBeginYear(startCal.get(Calendar.YEAR));
            everyWeek.setEndYear(endCal.get(Calendar.YEAR));
            everyWeek.setWeekBegin(sdf.format(startCal.getTime()));
            everyWeek.setWeekEnd(sdf.format(endCal.getTime()));
            everyWeek.setWeekNum(WeekNumStr);
            if (i <= 50) {
                weekList.add(everyWeek);
            }
            if (i > 50) {
                // 判斷最後一天是否在這區間內
                if (DateUtil.isEffectiveDate(lastDay, firstDayOfWeek, lastDayOfWeek)) {
                    // 判斷該年的最後一天(xxxx年12月31日)所在的周是不是當年的最後一週
                    if (result) {
                        weekList.add(everyWeek);
                    }
                    break;
                } else {
                    weekList.add(everyWeek);
                }
            }

        }
        return weekList;
    }
    
}
public class Week {

    private String weekNum;
    private int beginYear;
    private int endYear;
    // 周開始日期 格式: MM/dd
    private String weekBegin;
    // 周結束日期 格式: MM/dd
    private String weekEnd;

    public String getWeekNum() {
        return weekNum;
    }

    public void setWeekNum(String weekNum) {
        this.weekNum = weekNum;
    }

    public int getBeginYear() {
        return beginYear;
    }

    public void setBeginYear(int beginYear) {
        this.beginYear = beginYear;
    }

    public int getEndYear() {
        return endYear;
    }

    public void setEndYear(int endYear) {
        this.endYear = endYear;
    }

    public String getWeekBegin() {
        return weekBegin;
    }

    public void setWeekBegin(String weekBegin) {
        this.weekBegin = weekBegin;
    }

    public String getWeekEnd() {
        return weekEnd;
    }

    public void setWeekEnd(String weekEnd) {
        this.weekEnd = weekEnd;
    }

    @Override
    public String toString() {
        return weekBegin + " ~ " + weekEnd + "(第" + weekNum + "周)";
    }

    /**
     * 獲取周開始日期 (yyyy/MM/dd)
     * @return
     */
    public Date getWeekBeginDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        String strDate = beginYear + "/" + weekBegin;
        Date date = new Date();
        try {
            date = formatter.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 獲取周結束日期 (yyyy/MM/dd)
     * @return
     */
    public Date getWeekEndDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        String strDate = endYear + "/" + weekEnd;
        Date date = new Date();
        try {
            date = formatter.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 獲取周開始日期 (yyyy/MM/dd)
     * @return
     */
    public String getWeekBeginStr() {
        String strDate = beginYear + "/" + weekBegin;
        return strDate;
    }


    /**
     * 獲取周結束日期 (yyyy/MM/dd)
     * @return
     */
    public String getWeekEndStr() {
        String strDate = endYear + "/" + weekEnd;
        return strDate;
    }
}

相關推薦

工具時間日期獲取

public class DateUtil { public static final String DATE_FORMAT = "yyyy-MM-dd"; private static SimpleDateFormat sdf = new SimpleDa

【TOJ 5247】C++實驗時間日期

OS 日期類 一行 ID 表示 pac 日期 style pub 描述 用C++實現日期類CDate和時間類CTime,並在次基礎上利用多繼承實現日期時間類CDateTime,使其能輸出樣例信息。 主函數裏的代碼已經給出,請補充完整,提交時請勿包含已經給出的代碼。 int

java中正則表示式工具PatternMacher

原地址 java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 1.簡介: java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 它包括兩個類:Pattern和Matcher

localtime()函式獲取當前時間日期並轉換為本地時間

核心程式碼能一直獲取一個當前時間的表示, 通過檢視 jifies 的值. 常常地, 這個值只代表從最後一次啟動以來的時間, 這個事實對驅動來說無關, 因為它的生命週期受限於系統的 uptime. 如所示, 驅動可以使用 jiffies 的當前值來計算事件之間的時間間隔(例如, 在輸入驅動中從單擊中

10 友盟專案--日期工具時間對齊、地理庫Geolite

1.日期工具類     import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /*

java中的時間日期

日期、時間類 Date類 java8中的構造器,之前有六個但是其餘四個已經不推薦使用了。 構造器 功能 Date() 生成一個代表當前日期時間的Date物件

js獲取一天的開始時間結束時間日期與字串、數值之間的轉換

var time="2016-12-29"; var dayStart = Date.parse(new Date(time));//2016-12-29 0:0:0 var dayEnd = new Date().setTime((dayStart/1000+24*60*60-1

工具——Java時間戳與日期格式字串的互轉

import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 時間戳轉換成日期格式字串 * @param seconds 精確到

ABAP 自動獲取系統時間日期

  有些程式在新增或者修改資料的時候需要記錄建立和修改時間,當然這些欄位我們不可能手動輸入,這就要在提交資料時獲取系統時間,用如下module就可以完成此操作。   *--------------------------------------------------

Pandas時間序列頻率日期偏移量

import pandas as pd import numpy as np 一、介紹 pandas中的頻率是由一個基礎頻率(例如“日”、“月”)和一個乘陣列成。 基礎頻率通常以一個字串別名表

Android工具獲取手機的資料夾及檔案列表

效果圖: package wuwang.tools.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja

14.C語言中time函式localtime獲取系統時間日期

C語言中time函式和localtime獲取系統時間和日期可以通過time()函式來獲得計算機系統當前的日曆時間(Calendar Time),處理日期時間的函式都是以本函式的返回值為基礎進行運算。1. time 函式 返回1970-1-1, 00:00:00以來經過的秒數 

JS獲取當前時間日期

con mes cond class min 獲取 .get () clas 當前時間和日期      var myDate = new Date(); myDate.getYear(); //獲取當前年份(2位)

java工具,在Windows,Linux系統獲取電腦的MAC地址、本地IP、電腦名

copy iter 去掉m [] equals linu stat cli catch package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException;

iOS學習筆記37-時間日期計算

htm chinese 區域 nsis ios geo 代號 keyword 轉換 一、時間和日期計算 我們在應用開發中,時常須要和時間打交道,比方獲取當前時間,獲取兩個時間點相隔的時間等等,在iOS開發中與時間相關的類有例如以下幾個: 1. NSD

工具關於如何找到兩個List數組中不同的數據的算法!

開發人員 uri print clas 數據結構 blank _id integer public 找到兩個List數組中不同的數據的算法! import java.util.ArrayList;import java.util.HashMap;import java.ut

CentOS7--配置時間日期

缺省 顯示 start 運行 shang 使用 lean tle ice CentOS7提供三個命令行工具,可用於配置和顯示有關系統日期和時間的信息。 timedatectl:實用程序是紅帽企業版Linux 7中的新增功能,也是systemd其中的一部分。 d

JAVA中常用IO流FileInputStreamFileOutputStream

table string [] 文件中 讀取 描述符 off fis 系統資源 FileInputStream 用於讀取本地文件中的字節數據,繼承自InputStream類 構造方法摘要 FileInputStream(File file) 通

Java之工具判斷對象是否為空或null

sar 判斷 ins == span urn lean color style 1 import java.lang.reflect.Array; 2 import java.util.Collection; 3 import java.util.Map; 4

010 有順序的Map的實現TreeMapLinkedHashMap

隨機 子類 hashcode col 線程 tab www. 多個 最好 作者:nnngu GitHub:https://github.com/nnngu 博客園:http://www.cnblogs.com/nnngu 簡書:https://www.jianshu.com