在开发中,我们无可避免的会需要对时间进行操作,下面博主整理了一些关于时间的方法,并封装好,有需要的可以直接使用:
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import org.apache.poi.util.SystemOutLogger;
/**
* 按格式获取时间
* */
public class TimeUtils {
private static int weeks = 0;//
private int MaxDate;//一月最大的天数
private int MaxYear;//一年最大的天数
private static GregorianCalendar gc = new GregorianCalendar();
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static SimpleDateFormat linkDateFormat = new SimpleDateFormat("yyyyMMdd");
private static SimpleDateFormat linkTimeFormat = new SimpleDateFormat("yyyyMMddHHmmss");
private static SimpleDateFormat linkMonthFormat = new SimpleDateFormat("yyyyMM");
//获取当前日期
public static String getNowTime(){
Date now = new Date();
return dateFormat.format(now);
}
//获取前一天//type = 1 正常数据。根据capturetime。type=2为打分数据。因为打分为前天的数据所以要往前移二天
public static String getYesterday(int type){
Calendar calendar = Calendar.getInstance();
if(type == 1)
calendar.add(Calendar.DATE, -1);
else
calendar.add(Calendar.DATE, -2);
return dateFormat.format(calendar.getTime());
}
//获取本周1的日期
public static String getMondayOfWeed(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);
return dateFormat.format(calendar.getTime());
}
//获取前三天的日期
public static String getThreeBeforeDay(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -3);
return dateFormat.format(calendar.getTime());
}
//获取当前日期与本周日相差的天数
private static int getMondayPlus(){
Calendar cd = Calendar.getInstance();
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1;//周一为第一天
if(dayOfWeek == 1)
return 0;
else
return 1 - dayOfWeek;
}
//获取本月第一天日期
public static String getFirstDayOfMonth(){
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE, 1);
return dateFormat.format(lastDate.getTime());
}
//获取传入日期
public static String getInputDate(long time){
Date now = new Date(time);
return linkDateFormat.format(now);
}
//获取传入星期
public static int getInputWeek(long time){
Date now = new Date(time);
Calendar cal = Calendar.getInstance();
weeks = cal.get(Calendar.DAY_OF_WEEK)-1;
return weeks;
}
//获取当前日期
public static String getNowDate(){
Date now = new Date();
return linkDateFormat.format(now);
}
//获取前三天日期
public static String getThreeDateOfNow(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -3);
return linkDateFormat.format(calendar.getTime());
}
//获取七天前日期
public static String getDateOfWeed(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);
return linkDateFormat.format(calendar.getTime());
}
//add by zhanghe 20110803
//获取n天前日期
public static String getDateOfNDaysAgo(int n){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -n);
return dateFormat.format(calendar.getTime());
}
//获取当前日期带分钟
public static String getNowTimeWithMinutes(){
Date now = new Date();
return dateTimeFormat.format(now);
}
//获取当前日期带分钟
public static String getNowTimeWithMinutes(Long time){
Date now = new Date(time);
return dateTimeFormat.format(now);
}
//获取指定日期之后 指定天数 的日期字符串
public static String getAtteDate(Timestamp time,int day) {
gc.setTime(new Date(time.getTime()));
gc.add(5, +day);
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH),gc.get(Calendar.DATE));
return dateFormat.format(gc.getTime());
}
//获取指定日期之后指定年/月/天的日期
public static String getTargetDate(String targetDate,int year,int month,int day) throws ParseException{
Calendar c = Calendar.getInstance();
c.setTime(dateFormat.parse(targetDate));
c.add(Calendar.YEAR, year);
c.add(Calendar.MONTH, month);
c.add(Calendar.DAY_OF_MONTH, day);
return dateFormat.format(c.getTime());
}
//获取指定日期和当天的相隔天数
public static Long getDays(Timestamp atteTime){
if(atteTime==null){
return null;
}
return (System.currentTimeMillis()-atteTime.getTime())/(1000*60*60*24);
}
/**
* 获取日期,格式为yyyy-MM-dd
* @param offset 偏移量,0:当天的日期,-1:昨天的日期,1:明天的日期....
* @return
*/
public static String getDate(int offset){
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR, offset);
return dateFormat.format(c.getTime());
}
/**
* 获取时间,格式为yyyy-MM-dd HH:mm:ss
* @param offset 偏移量,0:当天的日期,-1:昨天的日期,1:明天的日期....
* @return
*/
public static String getTime(int offset){
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR, offset);
return dateTimeFormat.format(c.getTime());
}
//获取当前时间串
public static String getNowLinkTime(){
Date now = new Date();
return linkTimeFormat.format(now);
}
/**
* 将指定格式的字符串转换成时间Date类型
* @param strDate 需要转换的字符串
* @param formatDate 需要转换字符串的格式 (yyyy-MM-dd)
* @return
*/
public static Date getDateByStr(String strDate,String formatDate){
SimpleDateFormat sdf = new SimpleDateFormat(formatDate);
Date date = null;
try {
date= sdf.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 将Date 转换成指定格式的String
* @param date 需要转换的date
* @param formatDate 要转换成字符串的格式 (yyyy-MM-dd)
* @return
*/
public static String getStrByDate(Date date,String formatDate){
SimpleDateFormat sdf = new SimpleDateFormat(formatDate);
String strDate = null;
strDate = sdf.format(date);
return strDate;
}
/**
* 将秒转换成日期格式的字符串
* @param millis 秒 Long
* @return String 要转换成字符串的格式 (yyyy-MM-dd yyyy-MM-dd HH:mm:ss)
*/
public static String millsToDate(long millls){
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone.setDefault(tz);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String times = format.format(new Date(millls * 1000L));
return times;
}
/**
* 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成秒数
* @param String date
* @return
*/
public static long dateToLong (String datetime) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis() / 1000;
}
/**
* 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成秒数
* @param String date
* @return
*/
public static long dateToLongDay (String datetime) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis() / 1000;
}
public static long dateToLong (String datetime, String formatStr) {
SimpleDateFormat format = new SimpleDateFormat(formatStr);
Date date = null;
try {
date = format.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis() / 1000;
}
/**
* 将格式为yyyy-MM-dd HH:mm:ss的时间字符串转换成毫秒数
* @param String date
* @return
*/
public static long dateToMillLong (String datetime) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis();
}
/**
* 返回两个日期相隔的天数
* @param date1
* @param date2
* @return int
*/
static public int diffDate(java.util.Date date1,java.util.Date date2) {
return (int)((date1.getTime()-date2.getTime())/ (24*60*60*1000));
}
/**
* 返回某个日期的前后几天
* @param date
* @param day
* @return
*/
static public java.util.Date incDate(java.util.Date date,int day)
{
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.add(Calendar.DAY_OF_YEAR,day);
return cal.getTime();
}
/**
* 以当前时间为起点,获取输入时间点的数据
* @param day
* @return
*/
public static long getinputDaysOfNow(int day,long starttime){
Calendar currentDate = new GregorianCalendar();
currentDate.setTime(new Date(starttime));
currentDate.add(Calendar.DATE, day);
currentDate.set(Calendar.HOUR_OF_DAY,0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
return (currentDate.getTime().getTime())/1000;
}
/**
* 获取当天的开始时间
* @author lihw
* @date 2016-8-25上午10:38:23
* @return
*/
static public long getTodayStartTime(){
long time = System.currentTimeMillis();
Calendar currentDate = new GregorianCalendar();
currentDate.setTime(new Date(time));
currentDate.set(Calendar.HOUR_OF_DAY,0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
return (currentDate.getTime().getTime())/1000;
}
/**
* 获取传入时间的 日期天
* @author lihw
* @date 2016-9-3上午11:00:43
* @param time 10为数字
* @return
*/
public static String getStringDay(long time){
String strDate = null;
strDate = dateFormat.format(time*1000);
return strDate;
}
public static String getStringtime(long time){
String strDate = null;
strDate = dateTimeFormat.format(time*1000);
return strDate;
}
/**
* 获取传入时间天的开始时间
*
* @author lihw
* @date 2016-8-25上午10:38:23
* @return
*/
public static long getTodayStartTime(long time) {
Calendar currentDate = new GregorianCalendar();
currentDate.setTime(new Date(time));
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
return (currentDate.getTime().getTime()) / 1000;
}
/** 获取输入时间的当月开始时间*/
public static long getFirstDayTimeOfMonth(long time){
Calendar currentDate =Calendar.getInstance();
currentDate.setTime(new Date(time));
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
currentDate.set(Calendar.DATE, currentDate.getMinimum(Calendar.DAY_OF_MONTH));
return getTodayStartTime(currentDate.getTime().getTime());
}
/**
* 获取传入时间天的结束时间
*
* @author lihw
* @date 2016-8-25上午10:38:23
* @return
*/
public static long getTodayEndTime(long time) {
Calendar currentDate = new GregorianCalendar();
currentDate.setTime(new Date(time));
currentDate.set(Calendar.HOUR_OF_DAY, 23);
currentDate.set(Calendar.MINUTE, 59);
currentDate.set(Calendar.SECOND, 59);
currentDate.set(Calendar.MILLISECOND, 999);
return (currentDate.getTime().getTime()) / 1000;
}
/**
* 获取传入时间天 的时间
*
* @author lihw
* @date 2016-8-25上午10:38:23
* @return
*/
public static long getTodayEndTime(long time,int days) {
Calendar currentDate = new GregorianCalendar();
currentDate.setTime(new Date(time));
currentDate.add(Calendar.DAY_OF_MONTH, days);
return (currentDate.getTime().getTime())/1000;
}
/**
* 传入的时间 和格式获取时间long
* @author lihw
* @date 2016-9-3下午05:01:07
* @param datetime 时间
* @param dateFormat 时间格式
* @return long 14位
*/
public static long getLongTime(String datetime,String dateFormat){
DateFormat df = new SimpleDateFormat(dateFormat);
Date date = null;
try {
date = df.parse(datetime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis();
}
/**
* 获取当时时间 10位
* @author lihw
* @date 2016-9-29上午11:24:31
* @param time
* @param days
* @return
*/
public static long getNowtime() {
return System.currentTimeMillis()/1000;
}
/**
* 将秒转换成日期格式的字符串
* @param millis 秒 Long
* @return String 要转换成字符串的格式 (yyyy/MM/dd yyyy/MM/dd HH:mm:ss)
*/
public static String millsToDate1(long millls){
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone.setDefault(tz);
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String times = format.format(new Date(millls * 1000L));
return times;
}
/** 将绝对秒数转换成整点 */
public static long dateToHour(String date){
long dateHour = Long.valueOf(date)/3600*3600;
return dateHour;
}
//获取当前年月
public static String getNowMonth(){
Date now = new Date();
return linkMonthFormat.format(now);
}
//获取上月的年月
public static String getAgoMonth(){
int n = 1;
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -n);
return linkMonthFormat.format(calendar.getTime());
}
public static String toNowMonth(String date){
if(date!=null && !"".equals(date)){
String sta = null;
try {
Date d=new SimpleDateFormat("yyyy-MM-dd").parse(date);
sta=linkMonthFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sta;
}else{
Date now = new Date();
return linkMonthFormat.format(now);
}
}
}