DateTimeHelper【日期类型与字符串互转以及日期对比相关操作】

版权声明:本文为博主原创文章,未经博主允许不得转载。

前言

实现日期和字符串之间的转换以及日期的相关操作:

1、日期格式的字符串输出为Date类型;

2、将Date类型以指定格式输出;

3、将日期格式的字符串以指定格式输出;

4、将时间戳转化为固定格式的日期字符串 ;

5、将时间戳转化为指定格式日期的字符串;

6、当前时间提前一个月;

7、当前时间延后一个月;

。。。。。。

效果图

暂不需要

代码分析

注意:new SimpleDateFormat的构造函数中必须含有Locale.CHINA或者Locale.getDefault()

SimpleDateFormat format = new SimpleDateFormat(parse,Locale.CHINA);//区域设置为中文

SimpleDateFormat format = new SimpleDateFormat(parse,Locale.getDefault());//区域设置为本地

使用步骤

一、项目组织结构图

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将DateTimeHelper复制到项目中

package com.why.project.datetimehelperdemo.utils;

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

/**
 * Create By HaiyuKing
 * Used 实现日期和字符串之间的转换以及日期的相关操作
 * 注意 new SimpleDateFormat的构造函数中必须含有Locale.CHINA或者Locale.getDefault()
 *  SimpleDateFormat format = new SimpleDateFormat(parse,Locale.CHINA);//区域设置为中文
 *  SimpleDateFormat format = new SimpleDateFormat(parse,Locale.getDefault());//区域设置为本地
 *  解决黄色感叹号:http://www.blogchen.com/archives/392.html
 */
public class DateTimeHelper {

    public static final String FORMAT_24 = "yyyy-MM-dd HH:mm:ss";//24小时制
    public static final String FORMAT_12 = "yyyy-MM-dd hh:mm:ss";//12小时制
    public static final String FORMAT_TEXT_24 = "yyyy年MM月dd日 HH时mm分ss秒";
    public static final String FORMAT_TEXT_12 = "yyyy年MM月dd日 hh时mm分ss秒";
    public static final String FORMAT_DAY = "yyyy-MM-dd";//显示年月日

    /**
     * 将未指定格式的字符串转换成日期类型
     * @param date - 20151123 或者 2015/11/23 或者2015-11-23
     * @return Mon Nov 23 00:00:00 GMT+08:00 2015
     */
    public static Date parseStringToDate(String date) throws ParseException {
        Date result = null;
        String parse = date;
        parse = parse.replaceFirst("^[0-9]{4}([^0-9]?)", "yyyy$1");
        parse = parse.replaceFirst("^[0-9]{2}([^0-9]?)", "yy$1");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1MM$2");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}( ?)", "$1dd$2");
        parse = parse.replaceFirst("( )[0-9]{1,2}([^0-9]?)", "$1HH$2");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1mm$2");
        parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)", "$1ss$2");
        SimpleDateFormat format = new SimpleDateFormat(parse,Locale.CHINA);
        result = format.parse(date);
        return result;
    }
    /**
     * 将日期以指定格式输出
     * @param date - new Date()
     * @param format - "yyyy-MM-dd"
     * @return 2015-11-23
     */
    public static String formatToString(Date date, String format) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
            return sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * 将日期格式的字符串以指定格式输出
     * @param date - "2015/11/23"
     * @param format - "yyyy-MM-dd"
     * @return 2015-11-23
     */
    public static String formatToString(String date, String format) {
        try {
            Date dt = DateTimeHelper.parseStringToDate(date);
            SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
            return sdf.format(dt);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 将时间戳转化为固定格式的日期字符串 (yyyy-MM-dd HH:mm:ss)
     * @param time - new Date().getTime()+""
     * @return 2015-11-23 14:05:20
     */
    public static String getStrTime(String time) {
        if (time.trim().equals("") || time == null)
            return "";
        String strTime = null;
        time = time.substring(0, 10);
        SimpleDateFormat mFormat = new SimpleDateFormat(FORMAT_24,Locale.CHINA);
        long ltime = Long.valueOf(time);
        strTime = mFormat.format(new Date(ltime * 1000L));
        return strTime;
    }
    /**
     * 将时间戳转化为指定格式日期的字符串
     * @param time - new Date().getTime()+""
     * @param format - "yyyy年MM月dd日 hh时mm分ss秒"
     * @return 2015年11月23日 02时05分36秒
     */
    public static String getStrTime(String time, String format) {
        if (time.trim().equals("") || time == null || time.equals("null"))
            return "";
        String strTime = null;
        time = time.substring(0, 10);
        SimpleDateFormat mFormat = new SimpleDateFormat(format, Locale.CHINA);
        long ltime = Long.valueOf(time);
        strTime = mFormat.format(new Date(ltime * 1000L));
        return strTime;
    }

    /**
     * 当前时间提前一个月
     * @return 2015-10-23
     */
    public static String getPerMonthDate(){
        Date date = new Date();//当前日期
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_DAY,Locale.CHINA);//格式化对象
        Calendar calendar = Calendar.getInstance();//日历对象
        calendar.setTime(date);                        //设置当前日期
        calendar.add(Calendar.MONTH, -1);           //月份减一
        return sdf.format(calendar.getTime());
    }

    /**
     * 当前时间延后一个月
     * @return 2015-12-23
     */
    public static String getLastMonthDate(){
        Date date = new Date();//当前日期
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_DAY,Locale.CHINA);//格式化对象
        Calendar calendar = Calendar.getInstance();//日历对象
        calendar.setTime(date);                        //设置当前日期
        calendar.add(Calendar.MONTH, 1);           //月份加一
        return sdf.format(calendar.getTime());
    }

    /**
     * 计算时间差(单位:天)
     * @param startDate - "2015-11-23"
     * @param endDate - "2015-12-20"
     * @return 27(天)
     */
    public static String getTimeDifferenceDate(String startDate, String endDate) {
        try {
            Date d1 = parseStringToDate(endDate);
            Date d2 = parseStringToDate(startDate);
            long diff = d1.getTime() - d2.getTime();
            long days = diff / (1000 * 60 * 60 * 24);
            return days + "";
        } catch (Exception e) {
        }
        return "";
    }
    /**
     * 计算两个日期型的时间相差多少时间
     * @param startDate - DateTimeHelper.parseStringToDate("2015-11-23")
     * @param endDate - DateTimeHelper.parseStringToDate("2015-12-20")
     * @return 3周前
     */
    public static String twoDateDistance(Date startDate, Date endDate) {
        if (startDate == null || endDate == null) {
            return null;
        }
        long timeLong = endDate.getTime() - startDate.getTime();
        if (timeLong < 60 * 1000l)
            return timeLong / 1000 + "秒前";
        else if (timeLong < 60 * 60 * 1000l) {
            timeLong = timeLong / 1000 / 60;
            return timeLong + "分钟前";
        } else if (timeLong < 24 * 60 * 60 * 1000l) {
            timeLong = timeLong / 60 / 60 / 1000;
            return timeLong + "小时前";
        } else if (timeLong < 7 * 24 * 60 * 60 * 1000l) {
            timeLong = timeLong / 1000 / 60 / 60 / 24;
            return timeLong + "天前";
        } else if (timeLong < 4 * 7 * 24 * 60 * 60 * 1000l) {
            timeLong = timeLong / 1000 / 60 / 60 / 24 / 7;
            return timeLong + "周前";
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_DAY,Locale.CHINA);
            sdf.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
            return sdf.format(startDate);
        }
    }
    /**
     * 判断两个日期的大小
     *
     * @param DATE1 -- "2015-11-23
     * @param DATE2 --"2015-12-20"
     * @return true 默认第一个比第二个时间小,所以如果第一个大于第二个,返回false
     */
    public static boolean compare_date(String DATE1, String DATE2) {
        //DateFormat df = new SimpleDateFormat();

        //getDateInstance方法——获取日期格式器 2015-11-23
        //getDateTimeInstance方法——获取日期/时间格式器  2015-11-23 09:37:50
        //getInstance方法用于获取为日期和时间使用SHORT风格的默认日期/时间格式器
        DateFormat df = DateFormat.getDateInstance();
        try {
            Date dt1 = parseStringToDate(DATE1);
            Date dt2 = parseStringToDate(DATE2);
            if (dt1.getTime() >= dt2.getTime()) {
                return false;
            } else if (dt1.getTime() < dt2.getTime()) {
                return true;
            }

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return false;
    }

    /**
     * 将时间time字符串转化为Date对象
     * @param strTime - 1448208000000
     * @return Mon Nov 23 00:00:00 GMT+08:00 2015
     */
    public static Date parseFormatTimeToDate(String strTime) {

        Date date = new Date();
        try{
            date.setTime(Long.parseLong(strTime));
        }
        catch(NumberFormatException nfe){
            nfe.printStackTrace();
        }

        return date;
    }

    /**
     * 获取格式化后Date字符串的Time值
     * @param dateStr 20151123 或者 2015/11/23 或者2015-11-23
     * @return 1448208000000
     * */
    public static long getParseDateTime(String dateStr){
        long daterTime = 0;
        try {
            Date dt1 = parseStringToDate(dateStr);
            daterTime = dt1.getTime();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return daterTime;
    }

    /**
     * 当前时间延后一个星期
     * @param startDate 2016-03-16
     * @return 2015-03-23
     */
    public static String getLastWeekDate(String startDate){
        String endDate = "";
        try {
            Date date = parseStringToDate(startDate);
            long startTime = date.getTime();
            long endTime = startTime + 7 * 24 * 60 * 60 * 1000;
            endDate = getStrTime(endTime+"",FORMAT_DAY);
        } catch (Exception e) {
        }
        return endDate;
    }

    /**
     * 判断是否同一天【一般用来判断是否是今天】
     * @param date  new Date()
     * @param sameDate  DateTimeHelper.parseStringToDate("2015-12-20")
     * @return boolean false
     */
    public static boolean isSameDay(Date date, Date sameDate) {
        if (null == date || null == sameDate) {
            return false;
        }
        Calendar nowCalendar = Calendar.getInstance();
        nowCalendar.setTime(sameDate);
        Calendar dateCalendar = Calendar.getInstance();
        dateCalendar.setTime(date);
        if (nowCalendar.get(Calendar.YEAR) == dateCalendar.get(Calendar.YEAR)
                && nowCalendar.get(Calendar.MONTH) == dateCalendar.get(Calendar.MONTH)
                && nowCalendar.get(Calendar.DATE) == dateCalendar.get(Calendar.DATE)) {
            return true;
        }
        return false;
    }
}

DateTimeHelper.java

具体使用哪个方法,参考DateTimeHelper类中每个方法的注释。

三、使用方法

package com.why.project.datetimehelperdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.why.project.datetimehelperdemo.utils.DateTimeHelper;

import java.text.ParseException;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initDatas();
    }

    private void initDatas(){
        try {
            Date data1 = DateTimeHelper.parseStringToDate("20170521");
            Date data2 = DateTimeHelper.parseStringToDate("2017/05/21");
            Date data3 = DateTimeHelper.parseStringToDate("2017-05-21");
            Log.w(TAG,"将20170521转换成日期类型="+data1);
            Log.w(TAG,"将2017/05/21转换成日期类型="+data2);
            Log.w(TAG,"将2017-05-21转换成日期类型="+data3);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        String formatToString1 = DateTimeHelper.formatToString(new Date(),DateTimeHelper.FORMAT_DAY);
        Log.w(TAG,"将日期Date以指定格式(yyyy-MM-dd)输出="+formatToString1);
        String formatToString2 = DateTimeHelper.formatToString("2017/05/21",DateTimeHelper.FORMAT_DAY);
        Log.w(TAG,"将2017/05/21以指定格式(yyyy-MM-dd)输出="+formatToString2);

        String getStrTime1 = DateTimeHelper.getStrTime(new Date().getTime()+"");
        Log.w(TAG,"将时间戳转化为固定格式的日期(yyyy-MM-dd HH:mm:ss)字符串="+getStrTime1);
        String getStrTime2 = DateTimeHelper.getStrTime(new Date().getTime()+"",DateTimeHelper.FORMAT_TEXT_24);
        Log.w(TAG,"将时间戳转化为指定格式日期(yyyy年MM月dd日 HH时mm分ss秒)的字符串="+getStrTime2);

        String getPerMonthDate = DateTimeHelper.getPerMonthDate();
        Log.w(TAG,"当前时间(2017-05-21)的上一个月="+getPerMonthDate);

        String getLastMonthDate = DateTimeHelper.getLastMonthDate();
        Log.w(TAG,"当前时间(2017-05-21)的下一个月="+getLastMonthDate);

        String getTimeDifferenceDate = DateTimeHelper.getTimeDifferenceDate("2015-11-23","2015-12-20");
        Log.w(TAG,"2015-11-23和2015-12-20相差:"+getTimeDifferenceDate+"天");

        try {
            String twoDateDistance = DateTimeHelper.twoDateDistance(DateTimeHelper.parseStringToDate("2015-11-23"),DateTimeHelper.parseStringToDate("2015-12-20"));
            Log.w(TAG,"2015-11-23在2015-12-20:"+twoDateDistance);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        boolean compare_date = DateTimeHelper.compare_date("2015-11-23","2015-12-20");
        Log.w(TAG,"2015-11-23比2015-12-20小:"+compare_date);

        Date parseFormatTimeToDate = DateTimeHelper.parseFormatTimeToDate("1462772155198");
        Log.w(TAG,"将时间戳字符串(1462772155198)转化为Date对象:"+parseFormatTimeToDate);

        long getParseDateTime = DateTimeHelper.getParseDateTime("2015-11-23");
        Log.w(TAG,"将2015-11-23转换成时间戳字符串:"+getParseDateTime);

        String getLastWeekDate = DateTimeHelper.getLastWeekDate("2017-05-21");
        Log.w(TAG,"当前时间(2017-05-21)延后一个星期:"+getLastWeekDate);

        try {
            boolean isSameDay = DateTimeHelper.isSameDay(new Date(),DateTimeHelper.parseStringToDate("2015-12-20"));
            Log.w(TAG,"2015-12-20是今天吗?isSameDay:"+isSameDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

打印的日志:

混淆配置

参考资料

暂时空缺

项目demo下载地址

链接:http://pan.baidu.com/s/1skMRMlZ 密码:sya6

时间: 2024-09-30 14:19:26

DateTimeHelper【日期类型与字符串互转以及日期对比相关操作】的相关文章

JavaSE 日期类型与字符串类型的相互转换

package cn.zwq.convert; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期类型与字符串类型的相互转换 * * @author zwq * @version V1.0 * @Date 2016年10月11日 下午8:28:04 * */ public class DateConvert { public static void

java中json和字符串互转及日期转换 练习

一:以下是用到的jar名称: commons-beanutils-1.6.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.1.1.jar ezmorph-1.0.3.jar json-lib-2.2.3-jdk13.jar json.jar jar下载地址 链接: https://pan.baidu.com/s/1c2Mkqli 密码: 6ems 二:练习的时候用到了内部类,所以里面有一点对内部类的

Objective-C 枚举类型和字符串互转方案

原文转自  http://www.rijiyuelei.me/2012/09/enum-and-string-conversion-in-objective-c/ 枚举类型的使用优势没啥好说的.但经常需要将它与字串进行转换方便显示或其它需求. 在常见的方案中,多是先声明,然后在实现文件里创建一个映射表.这样带来的问题就是要分两个文件来管理,带来管理不方便不好.使用前还在确保映射表已经初始化.显然使用时还是有些许难受. 如果全部改用宏来实现则会好管理很多,而且对于映射表可以采用惰性初始化原则,即只

C# string转换成DateTime?(字符串转换成可空日期类型)

[转载] 作者:十有三 出处:http://shiyousan.com/post/ca4a6413-ecb4-4237-baf6-e88e616d18fc PS:此文主要讲述的是可空日期类型和字符串之间的转换,正常类型转换看这篇文章:字符串string类型转换成DateTime类型 最近项目中遇到以前一直困扰的问题,就是如何将string转换成DateTime?这种可空日期类型.以前总是通过编写一堆逻辑代码来进行转换,但是写这些代码感觉非常繁琐.后在网上浏览相关资料,使用NullableConv

在PL/SQL中使用日期类型

之前的文章介绍了在PL/SQL中使用字符串和数字了下.毫无疑问,字符串和数字很重要,但是可以确定的是没有哪个应用不依赖于日期的. 你需要记录事件的发生事件,人们的出生日期等等很多. 通常的使用方式是: 1)声明日期变量和常量 2)使用内建函数显示和修改日期值 3)执行日期相关计算 日期类型比字符串或数字更复杂.它有多个部分组成(年,月,日,时,分,秒等),而且关于一个有效的日期有很多规则. 本文将给你所有信息以便在PL/SQL程序中使用日期. 1.PL/SQL中的日期,时间戳和间隔(Interv

07、MySQL—时间日期类型

时间日期类型 1.Date 日期类型:系统使用三个字节来存储数据,对应的格式为:YYYY-mm-dd,能表示的范围是从1000-01-01 到9999-12-12,初始值为0000-00-00 2.Time 时间类型:能够表示某个指定的时间,但是系统同样是提供3个字节来存储,对应的格式为:HH:ii:ss,但是mysql中的time类型能够表示时间范围要大的多,能表示从-838:59:59~838:59:59,在mysql中具体的用处是用来描述时间段. 3.Datetime 日期时间类型:就是将

Java日期类型的绍介和操作(二十七)

Date类 Date类在java.util.Date,Date类表示特定的瞬间,精确到毫秒.(毫秒是千分之一秒)毫秒可以对时间和日期进行计算,可以把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期. 把日期转换为毫秒,时间原点为1970年1月1日 00:00:00(英国格林威治),毫秒数就是时间原点到当前日期的毫秒数.(注意一下:中国当前的时区为GMT+8,就是东八区,所以得加上八小时) 获取当前日期的毫秒数 System.out.println(System.currentTimeMill

java 日期和字符串互转,依据当天整天时间 得到当天最后一秒的日期时间

java 日期和字符串互转.依据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 依据当天整天时间 * 得到当天最后一秒 * 数据库查询时非常有意义 起始天 到结速天 比方按天查询 2014-06-17 00:00:00

java 日期和字符串互转,根据当天整天时间 得到当天最后一秒的日期时间

java 日期和字符串互转,根据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 根据当天整天时间 * 得到当天最后一秒 * 数据库查询时很有意义 起始天 到结速天 比如按天查询 2014-06-17 00:00:00