Date 格式转换
项目中涉及TimePicker,基本都会用到时间格式转换,在此总结一下,备用。
/**
* 获取指定日期周
*
* @return
*/
private String getWeeks(Date date) {
Calendar cal = Calendar.getInstance();//这一句必须要设置,否则美国认为第一天是周日,而我国认为是周
一,对计算当期日期是第几周会有错误
cal.setFirstDayOfWeek(Calendar.MONDAY); // 设置每周的第一天为星期一
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 每周从周一开始
cal.setMinimalDaysInFirstWeek(7); // 设置每周最少为7天
cal.setTime(date);
int weeks = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
Log.e(TAG, "getWeeks: " + weeks + ":" + year);
this.week = year + "-" + weeks;
return year + "-" + weeks;
}
/**
* 获取年
*
* @return
*/
private String getYear(Date date) {
Calendar cal = Calendar.getInstance();//这一句必须要设置,否则美国认为第一天是周日,而我国认为是周
一,对计算当期日期是第几周会有错误
cal.setFirstDayOfWeek(Calendar.MONDAY); // 设置每周的第一天为星期一
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 每周从周一开始
cal.setMinimalDaysInFirstWeek(7); // 设置每周最少为7天
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
this.year = year + "";
return year + "";
}
/**
* 获取年月
*
* @return
*/
private String getMonth(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
this.month = format.format(date);
return format.format(date);
}
/**
* 获取年月日
*
* @param date
* @return
*/
private String getTime(Date date) {//可根据需要自行截取数据显示
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
this.day = format.format(date);
return format.format(date);
}
/**
* 把GMT+8.0时间转换成UTC
*
* @param date
* @return
*/
private String getTimes(Date date) {
Calendar cal = Calendar.getInstance(Locale.CHINA);
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
// this.day =DateFormat.format("yyyy'-'MM'-'dd'T'kk':'mm':'ss'Z'", cal)+"";
this.day = DateFormat.format("yyyy'-'MM'-'dd'T'kk':'mm':'ss'Z'", date) + "";
return DateFormat.format("yyyy'-'MM'-'dd'T'kk':'mm':'ss'Z'", date) + "";
}
遇到一个问题是:后台返回的是时间格式为:"2018-11-30T08:55:34.971Z"的字符串,时候按照正常套路报错。下面是解析的办法,代码如下:
public String UTCStringtODefaultString(String UTCString) {
try{
UTCString = UTCString.replace("Z", " UTC");
SimpleDateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = utcFormat.parse(UTCString);
return defaultFormat.format(date);
} catch(ParseException pe)
{
pe.printStackTrace();
return null;
}
}
本地与UTC时间相互转换工具类
public class Local2UTCTimeUtils {
/**
* 当地时间 ---> UTC时间
*
* @return
*/
public static String Local2UTC() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("gmt"));
String gmtTime = sdf.format(new Date());
return gmtTime;
}
/**
* 任意时间---> UTC时间
*
* @return
*/
public static String Local2UTC(String localTime) {
SimpleDateFormat localFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//当地时间格式
localFormater.setTimeZone(TimeZone.getDefault());
Date gpsLocalDate = null;
try {
gpsLocalDate = localFormater.parse(localTime);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat utcFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//UTC时间格式
utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));
String UTCTime = utcFormater.format(gpsLocalDate.getTime());
return UTCTime;
}
/**
* UTC时间 ---> 当地时间
*
* @param utcTime UTC时间 UTC时间格式需要确认一下
* @return
*/
public static String utc2Local(String utcTime) {
SimpleDateFormat utcFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//UTC时间格式
utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gpsUTCDate = null;
try {
gpsUTCDate = utcFormater.parse(utcTime);
} catch (ParseException e) {
e.printStackTrace();
//时间错了返回返回的时间
return utcTime;
}
SimpleDateFormat localFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//当地时间格式
localFormater.setTimeZone(TimeZone.getDefault());
String localTime = localFormater.format(gpsUTCDate.getTime());
return localTime;
}
}