Java 将日期的时区更改为API级别21上的UTC
我有一个日期,我需要将该日期的时区更改为UTC。下面的代码不起作用Java 将日期的时区更改为API级别21上的UTC,java,android,datetime,Java,Android,Datetime,我有一个日期,我需要将该日期的时区更改为UTC。下面的代码不起作用 Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC")); cal.setTimeInMillis(dateLocal.getTime()); return new Date(cal.getTimeInMillis()); 在Stackoverflow上,所有示例返回字符串或使用AP
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.setTimeInMillis(dateLocal.getTime());
return new Date(cal.getTimeInMillis());
在Stackoverflow上,所有示例返回字符串或使用API 26。如何解决Android API 21上的问题?使用cal.getTime;返回日期的操作尝试以下操作:
public Date getDateInUtc() {
String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
Date dateToReturn = null;
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
String utcTime = sdf.format(new Date());
try {
dateToReturn = dateFormat.parse(utcTime);
} catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
无需SimpleDataFormat即可获得相同的结果:
public Date dateInUtc(Date input) {
Calendar inputCalendar = Calendar.getInstance();
inputCalendar.setTime(input);
TimeZone timeZone = inputCalendar.getTimeZone();
long timeInUtc = input.getTime() - timeZone.getRawOffset();
Calendar outputCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
outputCalendar.setTimeInMillis(timeInUtc);
return outputCalendar.getTime();
}
时区不改变java.util.Date没有时区,它只是一个自UTC 1970-01-01 00:00以来的毫秒数的薄包装。时区仅在解析或打印时相关。