系统默认的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()));
}
}
里面包含了测试代码