zoukankan      html  css  js  c++  java
  • 一个处理Date与String的工具类

    public class DateUtil {  
    private DateUtil(){

    }

    public static final String hhmmFormat="HH:mm";
    public static final String MMddFormat="MM-dd";
    public static final String yyyyFormat="yyyy";
    public static final String yyyyChineseFormat="yyyy年";
    public static final String yyyyMMddFormat="yyyy-MM-dd";
    public static final String fullFormat="yyyy-MM-dd HH:mm:ss";
    public static final String MMddChineseFormat="MM月dd日";
    public static final String yyyyMMddChineseFormat="yyyy年MM月dd日";
    public static final String fullChineseFormat="yyyy年MM月dd日 HH时mm分ss秒";
    public static final String [] WEEKS={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    public static final String [] WEEKS_EN={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    public static final String YMD_FORMAT = "yyyyMMdd";

    /**
    * 得到指定时间的时间日期格式
    * @param date 指定的时间
    * @param format 时间日期格式
    * @return
    */
    public static String getFormatDateTime(Date date,String format){
    DateFormat df=new SimpleDateFormat(format);
    return df.format(date);
    }
    /**
    * 得到指定时间的时间日期格式
    * @param date 指定的时间
    * @param format 时间日期格式
    * @param land 语言类型 en=英文,zh_CN=中文
    * @return
    */

    public static String getFormatDateTime(Date date,String format,String land){
    String time;
    String week;
    DateFormat df=new SimpleDateFormat(format);
    time = df.format(date);
    week = land.equals("zh_CN") ? WEEKS[getWeek(date)-1] : WEEKS_EN[getWeek(date)-1];
    time = time +" "+week;
    return time;
    }

    public static String formatDate(Date date, String format){
    DateFormat df=new SimpleDateFormat(format);
    return df.format(date);
    }

    public static String formatDateYmd(Date date){
    DateFormat df=new SimpleDateFormat("yyyyMMdd");
    return df.format(date);
    }

    public static String formatDateYmdHms(Date date){
    DateFormat df=new SimpleDateFormat("yyyyMMdd HH:mm:ss");
    return df.format(date);
    }

    public static Date stringToDateYmd(String dateString) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    Date date = null;
    try {
    date = simpleDateFormat.parse(dateString);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String formattedTime = simpleDateFormat.format(date);

    date = java.sql.Date.valueOf(formattedTime);
    return date;
    }

    public static Date stringToDateYmdHms(String dateString) {
    Date date = null;
    try
    {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    date = sdf.parse(dateString);
    }
    catch (ParseException e)
    {
    System.out.println(e.getMessage());
    }
    return date;
    }

    public static Date parseDateYmdHms(String dateString) {
    Date date = null;
    try
    {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
    date = sdf.parse(dateString);
    }
    catch (ParseException e)
    {
    throw new RuntimeException(e);
    }
    return date;
    }

    /**
    * 判断是否是润年
    * @param date 指定的时间
    * @return true:是润年,false:不是润年
    */
    public static boolean isLeapYear(Date date) {
    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    return isLeapYear(cal.get(Calendar.YEAR));
    }

    /**
    * 判断是否是润年
    * @param year 指定的年
    * @return true:是润年,false:不是润年
    */
    public static boolean isLeapYear(int year) {
    GregorianCalendar calendar = new GregorianCalendar();
    return calendar.isLeapYear(year);
    }

    /**
    * 判断指定的时间是否是今天
    * @param date 指定的时间
    * @return true:是今天,false:非今天
    */
    public static boolean isInToday(Date date){
    boolean flag=false;
    Date now=new Date();
    String fullFormat=getFormatDateTime(now, DateUtil.yyyyMMddFormat);
    String beginString=fullFormat+" 00:00:00";
    String endString=fullFormat+" 23:59:59";
    DateFormat df=new SimpleDateFormat(DateUtil.fullFormat);
    try {
    Date beginTime=df.parse(beginString);
    Date endTime=df.parse(endString);
    flag=date.before(endTime)&&date.after(beginTime);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return flag;
    }

    /**
    * 判断两时间是否是同一天
    * @param from 第一个时间点
    * @param to 第二个时间点
    * @return true:是同一天,false:非同一天
    */
    public static boolean isSameDay(Date from,Date to){
    boolean isSameDay=false;
    DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat);
    String firstDate=df.format(from);
    String secondDate=df.format(to);
    isSameDay=firstDate.equals(secondDate);
    return isSameDay;
    }

    /**
    * 求出指定的时间那天是星期几
    * @param date 指定的时间
    * @return 星期X
    */
    public static String getWeekString(Date date){
    return DateUtil.WEEKS[getWeek(date)-1];
    }

    /**
    * 求出指定时间那天是星期几
    * @param date 指定的时间
    * @return 1-7
    */
    public static int getWeek(Date date){
    int week=0;
    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    week=cal.get(Calendar.DAY_OF_WEEK);
    return week;
    }


    /**
    * 取得指定时间离现在是多少时间以前,如:3秒前,2小时前等
    * 注意:此计算方法不是精确的
    * @param date 已有的指定时间
    * @return 时间段描述
    */
    public static String getAgoTimeString(Date date){
    Date now=new Date();
    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    Date agoTime=cal.getTime();
    long mtime=now.getTime()-agoTime.getTime();
    String str="";
    long stime=mtime/1000;
    long minute=60;
    long hour=60*60;
    long day=24*60*60;
    long weeks=7*24*60*60;
    long months=100*24*60*60;
    if(stime<minute){
    long time_value=stime;
    if(time_value<=0){
    time_value=1;
    }
    str=time_value+"秒前";
    }else if(stime>=minute && stime<hour){
    long time_value=stime/minute;
    if(time_value<=0){
    time_value=1;
    }
    str=time_value+"分前";
    }else if(stime>=hour && stime<day){
    long time_value=stime/hour;
    if(time_value<=0){
    time_value=1;
    }
    str=time_value+"小时前";
    }else if(stime>=day&&stime<weeks){
    long time_value=stime/day;
    if(time_value<=0){
    time_value=1;
    }
    str=time_value+"天前";
    }else if(stime>=weeks&&stime<months){
    DateFormat df=new SimpleDateFormat(DateUtil.MMddFormat);
    str=df.format(date);
    }else{
    DateFormat df=new SimpleDateFormat(DateUtil.yyyyMMddFormat);
    str=df.format(date);
    }
    return str;
    }

    /**
    * 判断指定时间是否是周末
    * @param date 指定的时间
    * @return true:是周末,false:非周末
    */
    public static boolean isWeeks(Date date){
    boolean isWeek=false;
    isWeek=(getWeek(date)-1==0||getWeek(date)-1==6);
    return isWeek;
    }

    /**
    * 获取当前日期
    * @return Date
    * */
    public static Date getToday(){
    String date = DateUtil.formatDate(new Date(), YMD_FORMAT);
    return DateUtil.stringToDateYmd(date);
    }

    /**
    * 获取当前日期
    * @return Date
    * */
    public static String getTodayStrYmd(){
    String date = DateUtil.formatDate(new Date(), YMD_FORMAT);
    return date;
    }

    /**
    * 得到今天的最开始时间
    * @return 今天的最开始时间
    */
    public static Date getTodayBeginTime(){
    String beginString= DateUtil.yyyyMMddFormat+" 00:00:00";
    DateFormat df=new SimpleDateFormat(DateUtil.fullFormat);
    Date beginTime=new Date();
    try {
    beginTime=df.parse(beginString);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return beginTime;
    }

    /**
    * 得到今天的最后结束时间
    * @return 今天的最后时间
    */
    public static Date getTodayEndTime(){
    String endString= DateUtil.yyyyMMddFormat+" 23:59:59";
    DateFormat df=new SimpleDateFormat(DateUtil.fullFormat);
    Date endTime=new Date();
    try {
    endTime=df.parse(endString);
    } catch (ParseException e) {
    e.printStackTrace();
    }
    return endTime;
    }

    /**
    * 取得本周的开始时间
    * @return 本周的开始时间
    */
    public static Date getThisWeekBeginTime(){
    Date beginTime=null;
    Calendar cal=Calendar.getInstance();
    int week=getWeek(cal.getTime());
    week=week-1;
    int days=0;
    if(week==0){
    days=6;
    }else{
    days=week-1;
    }
    cal.add(Calendar.DAY_OF_MONTH, -days);
    beginTime=cal.getTime();
    return beginTime;
    }

    /**
    * 取得本周的开始日期
    * @param format 时间的格式
    * @return 指定格式的本周最开始时间
    */
    public static String getThisWeekBeginTimeString(String format){
    DateFormat df=new SimpleDateFormat(format);
    return df.format(getThisWeekBeginTime());
    }


    /**
    * 取得本周的结束时间
    * @return 本周的结束时间
    */
    public static Date getThisWeekEndTime(){
    Date endTime=null;
    Calendar cal=Calendar.getInstance();
    int week=getWeek(cal.getTime());
    week=week-1;
    int days=0;
    if(week!=0){
    days=7-week;
    }
    cal.add(Calendar.DAY_OF_MONTH, days);
    endTime=cal.getTime();
    return endTime;
    }


    /**
    * 取得本周的结束日期
    * @param format 时间的格式
    * @return 指定格式的本周结束时间
    */
    public static String getThisWeekEndTimeString(String format){
    DateFormat df=new SimpleDateFormat(format);
    return df.format(getThisWeekEndTime());
    }

    /**
    * 取得两时间相差的天数
    * @param from 第一个时间
    * @param to 第二个时间
    * @return 相差的天数
    */
    public static long getBetweenDays(Date from, Date to){
    long days=0;
    long dayTime=24*60*60*1000;
    long fromTime=from.getTime();
    long toTime=to.getTime();
    long times=Math.abs(fromTime-toTime);
    days=times/dayTime;
    return days;
    }

    /**
    * 取得两时间相差的小时数
    * @param from 第一个时间
    * @param to 第二个时间
    * @return 相差的小时数
    */
    public static long getBetweenHours(Date from,Date to){
    long hours=0;
    long hourTime=60*60*1000;
    long fromTime=from.getTime();
    long toTime=to.getTime();
    long times=Math.abs(fromTime-toTime);
    hours=times/hourTime;
    return hours;
    }

    /**
    * 取得在指定时间上加减days天后的时间
    * @param date 指定的时间
    * @param days 天数,正为加,负为减
    * @return 在指定时间上加减days天后的时间
    */
    public static Date addDays(Date date,int days){
    Date time=null;
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.DAY_OF_MONTH, days);
    time=cal.getTime();
    return time;
    }

    /**
    * 取得在指定时间上加减months月后的时间
    * @param date 指定时间
    * @param months 月数,正为加,负为减
    * @return 在指定时间上加减months月后的时间
    */
    public static Date addMonths(Date date,int months){
    Date time=null;
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.MONTH, months);
    time=cal.getTime();
    return time;
    }

    /**
    * 取得在指定时间上加减years年后的时间
    * @param date 指定时间
    * @param years 年数,正为加,负为减
    * @return 在指定时间上加减years年后的时间
    */
    public static Date addYears(Date date,int years){
    Date time=null;
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.YEAR, years);
    time=cal.getTime();
    return time;
    }

    /**
    * @param args
    */
    public static void main(String[] args) {

    System.out.println(getFormatDateTime(new Date(), DateUtil.yyyyMMddFormat,"en"));

    /* System.out.println(getFormatDateTime(new Date(),DateUtil.fullChineseFormat));
    System.out.println(isLeapYear(new Date()));
    Calendar cal=Calendar.getInstance();
    System.out.println(isInToday(cal.getTime()));
    Calendar cal2=Calendar.getInstance();
    cal2.set(2011, 06, 05);
    System.out.println(isSameDay(cal.getTime(),cal2.getTime()));
    System.out.println(WEEKS[getWeek(new Date())]); //星期几
    DateFormat df=new SimpleDateFormat(DateUtil.fullFormat);
    String fullString="2011-06-03 22:37:20";
    try {
    Date fulldate=df.parse(fullString);
    System.out.println(getBetweenDays(fulldate,cal.getTime()));
    System.out.println("ago:"+getAgoTimeString(fulldate));
    System.out.println(isWeeks(fulldate));
    } catch (ParseException e) {
    e.printStackTrace();
    }

    System.out.println(getThisWeekBeginTimeString(DateUtil.yyyyMMddChineseFormat));
    System.out.println(getThisWeekEndTimeString(DateUtil.yyyyMMddChineseFormat));
    System.out.println(addDays(new Date(),3));
    System.out.println(addDays(new Date(),-3));
    System.out.println(addMonths(new Date(),2));
    System.out.println(addMonths(new Date(),-2));
    System.out.println(addYears(new Date(),1));
    System.out.println(addYears(new Date(),-1));
    */
    }
  • 相关阅读:
    数据结构-线性表-链表
    [poj 2991]Crane[线段树表示向量之和,而非数量]
    vector要注意的点
    vector与deque的区别
    sendfile复习
    GPU和CPU的区别
    常用Linux命令 mount df dd
    可省略的关键字
    父类与子类的virtual
    加快编译的技巧 & mount及tmpfs
  • 原文地址:https://www.cnblogs.com/zhaoblog/p/6071030.html
Copyright © 2011-2022 走看看