Java日期工具类DateUtils

系统默认的Date类不包含时区的转换
这里借用了一个开源库:joda-time下载地址

package utils;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class DateUtils 
{
	public static long ONE_DAY_MS = 24*3600*1000L;
	
	public static void initTimeZone()
	{
		initTimeZone("Asia/Shanghai");
	}
	
	public static void initTimeZone(String area)
	{
		DateTimeZone.setDefault(DateTimeZone.forID(area)); 
	}
	
	/**
	 * Fri, 17 Nov 2023 01:35:08 CST
	 */
	public static String getWebDate()
	{
		return getWebDate(DateTime.now());
	}
	
	public static String getWebDate(long time)
	{
		return getWebDate(new DateTime(time));
	}
	
	public static String getWebDate(DateTime dt)
	{
		return dt.toString("EEE, dd MMM yyyy hh:mm:ss z", Locale.ENGLISH);
	}
	
	/**
	 * 返回yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String getDate()
	{
		return DateTime.now().toString("yyyy-MM-dd HH:mm:ss");
	}
	
	/**
	 * 返回11-Dec-21 16:33:11
	 * @return
	 */
	public static String getDateUK()
	{
		return DateTime.now().toString("dd-MMM-yy HH:mm:ss", Locale.UK);
	}
	
	/**
	 * 返回yyyy-MM-ddTHH:mm:ss
	 * @return
	 */
	public static String getDateT()
	{
		return DateTime.now().toString("yyyy-MM-dd'T'HH:mm:ss");
	}
	
	/**
	 * 返回yyyy-MM-ddTHH:mm:ss
	 * @return
	 */
	public static String getDateT( long time )
	{
		return new DateTime(time).toString("yyyy-MM-dd'T'HH:mm:ss");
	}
	
	/**
	 * 返回yy/MM/dd HH:mm
	 * @return
	 */
	public static String getDateT2( long time )
	{
		return new DateTime(time).toString("yy/MM/dd HH:mm");
	}
	
	/**
	 * 返回yyyy年MM月dd日
	 * @return
	 */
	public static String getDate2()
	{
		return DateTime.now().toString("yyyy年MM月dd日");
	}
	
	/**
	 * 返回yyyyMMddTHHmmssZ
	 * @return
	 */
	public static String getUTCDate2()
	{
		DateTime d = DateTime.now();
		d = d.toDateTime(DateTimeZone.UTC);
		
		return d.toString("yyyyMMdd'T'HHmmss'Z'");	
	}
	
	public static String getUTCDate2( long time )
	{
		DateTime d = new DateTime(time);
		d = d.toDateTime(DateTimeZone.UTC);
		
		return d.toString("yyyyMMdd'T'HHmmss'Z'");
	}
	
	/**
	 * 返回yyyy-MM-ddTHH:mm:ssZ
	 * @return
	 */
	public static String getUTCDate3( long time )
	{
		DateTime d = new DateTime(time);
		d = d.toDateTime(DateTimeZone.UTC);
		
		return d.toString("yyyy-MM-dd'T'HH:mm:ss'Z'");
	}
	
	public static long getMillis()
	{
		return new DateTime().getMillis();
	}
	
	public static long getUTCMillis()
	{
		return new DateTime().getMillis() - 8l * 3600l * 1000l;
	}
	
	/**
	 * 获取昨天的日期
	 * @return yyyy-MM-dd HH:mm:ss
	 */
	public static String getLastDay()
	{
		return getDate( new DateTime().getMillis() - 3600l *1000l * 24l);
	}
	
	/**
	 * 获取昨天的日期
	 * @return yyyy-MM-dd
	 */
	public static String getLastDayDate()
	{
		DateTime dt = new DateTime( DateTime.now().getMillis() - 3600l *1000l * 24l);
		return dt.toString("yyyy-MM-dd");
	}
	
	/**
	 * 用在文件名上面的,没有空格,冒号那些
	 * @return
	 */
	public static String getDateFileSys()
	{
		return getDateFileSys(null);
	}
	
	public static String getDateFileSys( DateTime date )
	{
		if( date==null ) date = DateTime.now();
		
		return date.toString("yyyy_MM_dd_HH_mm_ss");
	}
	
	
	/**
	 * yyyyMMddHHmmss
	 * @return
	 */
	public static String getDateSim()
	{
		return getDateSim(null);
	}
	/**
	 * yyyyMMddHHmm00
	 * @return
	 */
	public static String getDateSim( DateTime date )
	{
		if( date==null ) date = DateTime.now();
		
		return date.toString("yyyyMMddHHmmss");
	}
	
	/**
	 * yyyy-MM-dd HH_mm_00
	 * @return
	 */
	public static String getDateSim2()
	{
		return getDateSim2(null);
	}
	/**
	 * yyyy-MM-dd HH_mm_00
	 * @return
	 */
	public static String getDateSim2( DateTime date )
	{
		if( date==null ) date = DateTime.now();
		
		return date.toString("yyyy-MM-dd HH_mm_00");
	}
	
	/**
	 * 2019-06-20T06:36:11Z
	 * @param time
	 * @return
	 */
	public static String getUTCDate( long time )
	{
		DateTime d = new DateTime(time);
		d = d.toDateTime(DateTimeZone.UTC);
		
		String s = getDate(d);
		s = s.replace(' ', 'T');
		
		return s + "Z";
	}
	
	/**
	 * 返回yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String getDate( long time )
	{
		DateTime date = new DateTime(time);
		
		return date.toString("yyyy-MM-dd HH:mm:ss");
	}
	
	/**
	 * 返回yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String getDate( DateTime date )
	{
		if( date==null ) date = DateTime.now();
		
		return date.toString("yyyy-MM-dd HH:mm:ss");
	}
	
	
	/**
	 * 返回yyyy-MM-dd
	 * @return
	 */
	public static String getDate2( long time )
	{
		DateTime date = new DateTime(time);
		
		return date.toString("yyyy-MM-dd");
	}
	/**
	 * 返回yyyy年MM月dd日
	 * @return
	 */
	public static String getDate2( String time )
	{
		SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		Date date = null;
		try {
			date = format.parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		long t = date.getTime();	
		
		DateTime d = new DateTime(t);
		
		return d.toString("yyyy年MM月dd日");
	}

	/**
	 * 返回yyyy-MM-dd
	 * @return
	 */
	public static String getDate4( String time )
	{
		SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = format.parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		long t = date.getTime();

		DateTime d = new DateTime(t);

		return d.toString("yyyy-MM-dd");
	}
	
	/**
	 * 返回MM月dd日
	 * @return
	 */
	public static String getDate3( String time )
	{
		SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		Date date = null;
		try {
			date = format.parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		long t = date.getTime();	
		
		DateTime d = new DateTime(t);
		
		return d.toString("MM月dd日");
	}
	
	/**
	 * 时间转换格式
	 * @return
	 */
	public static String formatConversion( String time, String format )
	{
		SimpleDateFormat _format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		Date date = null;
		try {
			date = _format.parse(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		long t = date.getTime();	
		
		DateTime d = new DateTime(t);
		
		return d.toString(format);
	}
	
	public static String getHour( long time ) 
	{
		return getHour( new DateTime(time) );
	}
	
	public static String getHour() 
	{
		return getHour(null);
	}
	
	/**
	* 得到现在小时
	*/
	public static String getHour( DateTime date ) 
	{
	    return getDate(date).substring(11, 13);
	}
	
	public static String getMinute() 
	{
		return getMinute(null);
	}
	 
	/**
	 * 得到现在分钟
	 *
	 * @return
	 */
	public static String getMinute(DateTime date)
	{
	    return getDate(date).substring(14, 16);
	}

	
	/*
	 * 获取今天的结束时间
	 */
	public static long getTotayFinishTime()
	{
		Calendar currentDate = new GregorianCalendar();   
		  
		currentDate.set(Calendar.HOUR_OF_DAY, 23);  
		currentDate.set(Calendar.MINUTE, 59);  
		currentDate.set(Calendar.SECOND, 59);  
		
		return currentDate.getTimeInMillis();
	}
	
	public static long getNextHour()
	{
		Calendar currentDate = new GregorianCalendar();   
		  
		currentDate.set(Calendar.MINUTE, 0);  
		currentDate.set(Calendar.SECOND, 0);  
		
		return currentDate.getTimeInMillis() + 3600000;
	}
	
	/**
	 * 
	 * @param strDate 2019-01-01 00:00:00
	 * @return
	 */
	public static long fromStr( String strDate )
	{
		strDate = strDate.trim().replace(" ", "T");
		return DateTime.parse(strDate).getMillis();
	}
	
	/**
	 * 
	 * @param strDate 20190620T044400Z
	 * @return
	 */
	public static long fromStr2( String strDate )
	{
		DateTimeFormatter dt = DateTimeFormat.forPattern("yyyyMMdd'T'HHmmss'Z'");
		return dt.parseDateTime(strDate).getMillis();
	}
	/**
	 * 
	 * @param strDate 2020-08-20T00:00:00Z
	 * @return
	 */
	public static long fromStr4( String strDate )
	{
		return DateTime.parse(strDate).getMillis();
	}
	
	/**
	 * 
	 * @param strDate 2019/01/01 11:11:11
	 * @return
	 */
	public static long fromStr3( String strDate )
	{
		strDate = strDate.trim().replace("/", "-");
		strDate = strDate.trim().replace("/", "-");
		
		return fromStr(strDate);
	}
	
	public static int getPassDay( String from, String to )
	{
		long f = fromStr(from);
		long t = fromStr(to);
		
		return (int)((t - f) / (3600000*24));
	}
	
	/**
	 * 
	 * @param strDate 2018-05-11
	 * @return
	 */
//	public static String fromStr3( String strDate )
//	{
//	}
//	
	public static void main(String[] args)
	{
		initTimeZone();
		
		int pd = getPassDay("2022-01-01 00:00:11", "2022-01-03 00:00:11");
		System.out.println(pd);
		
		System.out.println(getWebDate(System.currentTimeMillis()));
		System.out.println( DateTime.now().toString("EEE, dd MMM yyyy hh:mm:ss z",Locale.ENGLISH));
		
		System.out.println( DateTime.now().toString("dd-MMM-yy HH:mm", Locale.UK) );
		System.out.println( DateUtils.getDateFileSys());
		System.out.println( DateUtils.getUTCDate2(System.currentTimeMillis()));
		
		long ll = DateUtils.fromStr4("2020-08-20T00:00:00Z");
		System.out.println(ll = DateTime.parse("2020-08-20T00:00:00Z").getMillis());
		System.out.println("-- " + DateUtils.getDate(ll));
		
		String strDate = "20190620T153000Z";
		strDate = strDate.substring(0, 4) + "-" + strDate.substring(4, 6) + "-" + strDate.substring(6, 8) + "T" + strDate.substring(9, 11) + ":" + strDate.substring(11, 13) + ":" + strDate.substring(13);
		
		System.out.println(strDate);
		System.out.println(DateTime.parse(strDate).getMillis());
		System.out.println(DateTime.parse(strDate).toString());
		System.out.println(DateTime.now().getMillis());
		System.out.println(DateTime.now().withZone(DateTimeZone.UTC).getMillis());
		System.out.println(System.currentTimeMillis());
		
		System.out.println("-------------------");
		strDate = getDate(System.currentTimeMillis());
		strDate = strDate.trim().replace(" ", "T");
		System.out.println(DateTime.parse(strDate+"Z").getMillis());
		
		System.out.println("-------------------");
		System.out.println(getDate(fromStr("2018-01-02")-86400));
		System.out.println("-------------------");
		System.out.println(getUTCDate2(System.currentTimeMillis()));
	}
}

里面包含了测试代码

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值