版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

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

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下载地址

https://github.com/haiyuKing/DateTimeHelperDemo

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

  1. MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性

    1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...

  2. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  3. java日期类型与字符串类型的相互转换

    package cn.zwq.convert; import java.text.ParseException; import java.text.SimpleDateFormat; import j ...

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

    一:以下是用到的jar名称: commons-beanutils-1.6.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons- ...

  5. 07、MySQL—时间日期类型

    时间日期类型 1.Date 日期类型:系统使用三个字节来存储数据,对应的格式为:YYYY-mm-dd,能表示的范围是从1000-01-01 到9999-12-12,初始值为0000-00-00 2.T ...

  6. Java | 日期类型的绍介和操作

    Date类 Date类在java.util.Date,Date类表示特定的瞬间,精确到毫秒.(毫秒是千分之一秒)毫秒可以对时间和日期进行计算,可以把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期 ...

  7. SpringMVC 06: 日期类型的变量的注入和显示

    日期处理和日期显示 日期处理 此时SpringMVC的项目配置和SpringMVC博客集中(指SpringMVC 02)配置相同 日期处理分为单个日期处理和类中全局日期处理 单个日期处理: 使用@Da ...

  8. Date日期类型的绑定

    自定义类型的绑定 springmvc没有提供默认的对日期类型的绑定,需要自定义日期类型的绑定 第一张图是po类中日期属性,第二张图是页面中日期属性的内容,第三张图片是访问出现400错误 因为日期的格式 ...

  9. MySQL 日期类型及默认设置 (除timestamp类型外,系统不支持其它时间类型字段设置默认值)

    MySQL 日期类型及默认设置 之前在用 MySQL 新建 table,创建日期类型列时遇到了一些问题,现在整理下来以供参考. MySQL 的日期类型如何设置当前时间为其默认值? 答:请使用 time ...

随机推荐

  1. Spider与OpenPyXL的结合

    OpenPyXL的API文档 1.OpenPyXL基础操作 引入Workbook这个类,然后调用 from openpyxl import Workbook wb = Workbook() 通过ope ...

  2. Intellij Idea中如何debug本地maven项目

    方法一:使用maven中的jetty插件调试本地maven项目 1.打断点 2.右击"jetty:run",选择Debug运行 3.浏览器发送http请求,开始调试 方法二:利用远 ...

  3. 让Tomcat告别频繁重启

    在网站开发过程中,有一个很烦的问题就是每次我们在项目里增加几行代码,然后我们企图在浏览器中查看修改后的变化时,却发现浏览器的内容并不变化,于是我们只能通过频繁的重启tomcat来获得最新的效果,其实这 ...

  4. BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS

    BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS Description 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) Input 第一行两个整数n和p,表示矩阵的 ...

  5. javascript && php &&java

    java && javascript && php 轰炸!!!恢复 1.javascript简介 *是基于对象和时间的驱动语言,应用于客户端. -----基于对象: * ...

  6. 《Thinking in Android 9.0 系统开发源码钻研录》

    最近打算把个人站点的博客文章同步到"博客园"! Thinking in Android -- "系统启动" [启动阶段] [相关文章] 状态 源码版本 init ...

  7. 什么是CSS

    CSS是Cascading Style Sheet的缩写.译作”层叠样式表单“.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言.使用CSS样式可以控制许多仅使用HTML无法控 ...

  8. [ArcGIS API for JavaScript 4.8] Sample Code-Popups-1-popupTemplate的概念和popup中属性字段值的多种表现形式

    [官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html] 一. ...

  9. SQL Server使用sp_rename重命名约束注意事项

    在SQL Server中,我们可以使用sp_name这个系统存储过程重命名数据库中对象的名称. 此对象可以是表. 索引. 列. 别名,约束等数据类型(具体可以参考官方文档).上周在使用这个函数重构数据 ...

  10. 项目升级-oracle改版sql server问题点汇总

    目录 1.符号使用 1.1 :->@ 1.2 mod()->% 1.3 ||->+ 1.4 off等表别名 1.5 columnnum=1->top 1 1.6 minus-& ...