Java 将日期的时区更改为API级别21上的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

我有一个日期,我需要将该日期的时区更改为UTC。下面的代码不起作用

    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以来的毫秒数的薄包装。时区仅在解析或打印时相关。