zoukankan      html  css  js  c++  java
  • JAVA与日期相关的转换

    package com.samsung.cloud.util;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    public class DateUtil {
        
        public static String YEAR = "year";
        public static String WEEK = "week";
        public static String DATEFORMATE = "yyyy/MM/dd";
        public static String HYPHEN = "~";
        /**get Date by String
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return
         */
        public static Date getDate(String source,String format) {
    
            Date date = null;
            try {
                DateFormat dateFormat = new SimpleDateFormat(format);
    
                //check the valid of date source
                //example:if source is "1996-13-3" ,it cannot be changed to "1997-1-3".
                dateFormat.setLenient(false);
                
                date = dateFormat.parse(source);
            } catch (ParseException e) {
                
                throw new RuntimeException("Invalid date: " + source);
            }
            return date;
        }
        
        /**get String by Date
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return
         */
        public static String getString(Date date,String format) {
    
            return new SimpleDateFormat(format).format(date);
        }
        
        /**get time by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param format
         * @return String with the format
         */
        public static String getNow(String format){
            String now = new SimpleDateFormat(format).format(new Date());
            return now;
        }
        
    
        /**get tomorrow by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param 
         * @return Date
         */
        public static Date getTomorrow(){
            
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_MONTH,1);
            
            return cal.getTime();
        }
        
        /**get tomorrow by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param format
         * @return String with the format
         */
        public static String getTomorrow(String format){
            
            String tomorrow = new SimpleDateFormat(format).format(getTomorrow());
            
            return tomorrow;
        }
        
        /**get tomorrow by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param Date date,format
         * @return String with the format
         */
        public static String getTomorrow(Date date,String format){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.DAY_OF_MONTH,1);
            
            String tomorrow = new SimpleDateFormat(format).format(cal.getTime());
            return tomorrow;
        }
        
        
        /**get yesterday by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param 
         * @return Date
         */
        public static Date getYesterday(){
            
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_MONTH,-1);
            
            return cal.getTime();
        }
        
    
        /**get yesterday by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param String date,format
         * @return String with the format
         */
        public static String getYesterday(Date date,String format){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.DAY_OF_MONTH,-1);
            
            String yesterday = new SimpleDateFormat(format).format(cal.getTime());
            return yesterday;
        }
        
        
        /**get yesterday by format ,such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * 
         * @param format
         * @return String with the format
         */
        public static String getYesterday(String format){
            
            String yesterday = new SimpleDateFormat(format).format(getYesterday());
            
            return yesterday;
        }
        
    
        /**get dayOfWeek by Date
         * 
         * @param 
         * @return 
         */
        public static int getDayOfWeek(Date date){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            
            return cal.get(Calendar.DAY_OF_WEEK);
        }
    
        /**get dayOfWeek 
         * 
         * @param format
         * @return 
         */
        public static int getDayOfWeek(String date,String format){
            
            return getDayOfWeek(getDate(date,format));
        }
        
        
        
        /**get dayOfYear by Date
         * 
         * @param 
         * @return 
         */
        public static int getDayOfYear(Date date){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            
            return cal.get(Calendar.DAY_OF_YEAR);
        }
    
        /**get dayOfYear 
         * 
         * @param format
         * @return 
         */
        public static int getDayOfYear(String date,String format){
            
            return getDayOfYear(getDate(date,format));
        }
        
        
        /**get days By MonthOfYear 
         * 
         * @param 
         * @return 
         */
        public static int getDaysByMonthOfYear(String monthOfYear,String format){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(getDate(monthOfYear,format));
            
            return cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
        }
        
        
        /**get number of two days
         * 
         * @param 
         * @return
         */
        public static int getDaysBetween(Date startDate, Date endDate){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(startDate);
            long startTime = cal.getTimeInMillis();
            cal.setTime(endDate);
            long endTime = cal.getTimeInMillis();
            
            long between_days = (endTime - startTime) / (1000 * 3600 * 24);
            return Integer.parseInt(String.valueOf(between_days));
        }
        
        /**get number of two days
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return
         */
        public static int getDaysBetween(String startDate, String endDate, String format){
            
            return getDaysBetween(getDate(startDate ,format),getDate( endDate ,format));
        }
        
        
        
        /**compare two date String
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return 1:date1 is after date2,0:equal,-1:date1 is before date2
         */
        public static int compareTwoDate(String date1,String date2,String format){
            int flag = 0;
            if(!date1.equals(date2)){
                Date d1 = getDate(date1 ,format);
                Date d2 = getDate(date2 ,format);
                flag = d1.compareTo(d2);
            }
            return flag;
            
        }
        
        /**get week of year by date
         * 
         * @param 
         * @return return value is a String like "yyyyWww".
         * @throws ParseException 
         */
        
        
        public static String getWeekOfYearByDay(Date date){
      
            Calendar cl = Calendar.getInstance();    
            cl.setTime(date);
            
            int week = cl.get(Calendar.WEEK_OF_YEAR);      
            cl.add(Calendar.DAY_OF_MONTH, -7);   
            int year = cl.get(Calendar.YEAR);   
            if(week<cl.get(Calendar.WEEK_OF_YEAR)){   
                year+=1;   
            }  
            
            return year + "W" + week;
        }
        
        
        /**get week of year by date
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return return value is a String like "yyyyWww".
         */
        public static String getWeekOfYearByDay(String date,String format) throws ParseException{
            
            Date d = new Date();
            d = getDate(date, format);
            return getWeekOfYearByDay(d);
        }
        
        /**get weeks of a year 
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return 
         */
        public static int getDaysByYear(String date,String format){
            
            Calendar cal = Calendar.getInstance();
            cal.setTime(getDate(date, format));
            
            //get days number of the year
            cal.set(Calendar.MONTH,11);
            cal.set(Calendar.DAY_OF_MONTH,31);
            
            return cal.get(Calendar.DAY_OF_YEAR);
        }
        
        /**get weeks of a year 
         * 
         * @param format :such as "yyyy-MM-dd HH:mm:ss","yyMMdd".
         * @return 
         */
        public static int getWeeksByYear(String date,String format){
            
            int weeks = 0;
            Calendar cal = Calendar.getInstance();
            
            //get dayOfWeek on 01-01 
            cal.setTime(getDate(date, format));
            cal.set(Calendar.MONTH,0);
            cal.set(Calendar.DAY_OF_MONTH,1);
            int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
            
            //get days number of the year
            int yearDays = getDaysByYear(date, format);
            
            //calculate the weeks
            weeks = yearDays/7+1;
            int flag = yearDays % 7;
            if(flag > (7-dayOfWeek)){
                weeks++;
            }
    
            return weeks;
        }
    
        
        /**get weeks of a year 
         * 
         * @param 
         * @return 
         */
        public static int getWeeksByYear(int year){
            
            String dateYear = String.valueOf(year);
            return getWeeksByYear(dateYear,"yyyy");
        }
        /**get date by year,week,dayOfWeek
         * 
         * @param year,week,dayOfWeek is the day in a week you want to get.
         * @return
         */
        public static Date getDayByWeekOfYear(int year,int week,int dayOfWeek){
            
            int maxWeeks = getWeeksByYear(year);
            if(week > maxWeeks){
                throw new RuntimeException("The week is not valid!");
            }
            if(1 > dayOfWeek || 7 < dayOfWeek ){
                throw new RuntimeException("The dayOfWeek is not valid!");
            }
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.WEEK_OF_YEAR, week);
            cal.set(Calendar.DAY_OF_WEEK, dayOfWeek);
            
            return cal.getTime();
        }
        
        
    
        /**get year,week from String
         * 
         * @param weekOfYear is a String like "yyyyWww",dayOfWeek is the day in a week you want to get.
         * @return
         */
        public static Map<String,Integer> getYearAndWeekByString(String weekOfYear){
            
            Map<String,Integer> map = new HashMap<String,Integer>();
            
            if(!weekOfYear.matches("\d{4}W\d{2}")){
             throw new RuntimeException("The format is not 'yyyyWww' !");
            }
            
            int year = Integer.parseInt(weekOfYear.substring(0,4));
            int week = Integer.parseInt(weekOfYear.substring(5,7));
            
            map.put(YEAR,year);
            map.put(WEEK,week);
            
            return map;
        }
        
        /**get date by year,week,dayOfWeek
         * 
         * @param weekOfYear is a String like "yyyyWww",dayOfWeek is the day in a week you want to get.
         * @return
         */
        public static Date getDayByWeekOfYear(String weekOfYear,int dayOfWeek){
            
            Map<String,Integer> map = getYearAndWeekByString(weekOfYear);
            int year =  map.get(YEAR);
            int week =  map.get(WEEK);
            
            return getDayByWeekOfYear(year,week,dayOfWeek);
        }
        
        /**get next week by week of year
         * 
         * @param weekOfYear is a String like "yyyyWww",dayOfWeek is the day in a week you want to get.
         * @return
         */
        public static String getNextWeekByWeekOfYear(String weekOfYear){
            
            Map<String,Integer> map = getYearAndWeekByString(weekOfYear);
            int year =  map.get(YEAR);
            int week =  map.get(WEEK);
            
            //get the last day of the week
            Date lastDayOfWeek = getDayByWeekOfYear(year, week, 7);
            
            //get the first day of next week(next sunday)
            Calendar cal = Calendar.getInstance();
            cal.setTime(lastDayOfWeek);
            cal.add(Calendar.WEEK_OF_YEAR,1);
            
            return getWeekOfYearByDay(cal.getTime());
        }
        
        
        /**get last week by week of year
         * 
         * @param weekOfYear is a String like "yyyyWww",dayOfWeek is the day in a week you want to get.
         * @return
         */
        public static String getLastWeekByWeekOfYear(String weekOfYear){
            
            Map<String,Integer> map = getYearAndWeekByString(weekOfYear);
            int year =  map.get(YEAR);
            int week =  map.get(WEEK);
            
            //get the first day of the week
            Date lastDayOfWeek = getDayByWeekOfYear(year, week, 1);
            Calendar cal = Calendar.getInstance();
            cal.setTime(lastDayOfWeek);
            
            //get the last day of last week(last saturday)
            cal.add(Calendar.DAY_OF_MONTH,-1);
            return getWeekOfYearByDay(cal.getTime());
        }
        
        public static void main(String[] args) {
            System.out.println("Today:               " + getNow("yy-MM-dd HH:mm:ss"));
            System.out.println("Tomorrow:            " + getTomorrow("yy-MM-dd HH:mm:ss"));
            System.out.println("Tomorrow:            " + getTomorrow(getDate("2014-12-1","yy-MM-dd"),"yy-MM-dd"));
            System.out.println("Yesterday:           " + getYesterday("yy-MM-dd HH:mm:ss"));
            System.out.println("Yesterday:           " + getYesterday(getDate("2014-12-1","yy-MM-dd"),"yy-MM-dd"));
            System.out.println("Date formate:        " + getDate("2013-04-08 23:12:34","yy-MM-dd HH:mm:ss"));
            System.out.println("String by Date:      " + getString(getDate("2013-04-08 23:12:34","yy-MM-dd HH:mm:ss"),"yy/MM/dd HH:mm:ss"));
            System.out.println("Days between1:       " + getDaysBetween(new Date(),getDate("2014-05-08 10:12:34","yy-MM-dd HH:mm:ss")));
            System.out.println("Days between2:       " + getDaysBetween("2013:04:19","2014:04:19","yy:MM:dd"));
            System.out.println("Days between2:       " + getDaysBetween("2014-05-12","2014-05-06","yy-MM-dd"));
            System.out.println("Sunday OF Week:      " + getDayByWeekOfYear(2000,54,5));
            System.out.println("Sunday OF Week:      " + getString(getDayByWeekOfYear("1914W20",1),"yy/MM/dd HH:mm:ss"));
            System.out.println("Compare two days:    " + compareTwoDate("2014-05-19","2014-04-19","yy-MM-dd"));
            System.out.println("Weeks by year:       " + getWeeksByYear("2000","yyyy"));
            System.out.println("Day of Week:         " + getDayOfWeek("2000-1-2", "yy-MM-dd"));
            System.out.println("Day of Year:         " + getDayOfYear("2000-1-2", "yy-MM-dd"));
            System.out.println("Days By Year:        " + getDaysByYear("2000-1-2", "yy-MM-dd"));
            System.out.println("Days By MonthOfYear: " + getDaysByMonthOfYear("2001-2-2", "yy-MM-dd"));
            System.out.println("WeekOfYearByDay:     " + getWeekOfYearByDay(getDate("2013-12-28","yy-MM-dd")));
            System.out.println("WeekOfYearByDay:     " + getWeekOfYearByDay(getDate("2014-1-1","yy-MM-dd")));        
            System.out.println("WeekOfYearByDay:     " + getWeekOfYearByDay(getDate("2014-5-13","yy-MM-dd")));
            System.out.println("WeekOfYearByDay:     " + getWeekOfYearByDay(getDate("2014-12-31","yy-MM-dd")));
            System.out.println("Next week:           " + getNextWeekByWeekOfYear("2014W53"));
            System.out.println("Next week:           " + getNextWeekByWeekOfYear("2000W54"));
            System.out.println("Weeks by year:       " + getWeeksByYear(2000));
            System.out.println("Last week:           " + getLastWeekByWeekOfYear("2001W01"));
            System.out.println("Last week:           " + getLastWeekByWeekOfYear("2013W53"));
            
        }
    
    }
  • 相关阅读:
    golang_并发安全: slice和map并发不安全及解决方法
    什么情况下需要用到互斥锁sync.Mutex?
    使用Charles进行HTTPS抓包
    centos6 yum 源失效 404,终于解决了
    GOMAXPROCS你设置对了吗?
    容器资源可见性问题与 GOMAXPROCS 配置
    gflags 使用方式
    分布式训练问题
    NCCL常用环境变量
    git 常用命令
  • 原文地址:https://www.cnblogs.com/wxlovewx/p/5431282.html
Copyright © 2011-2022 走看看