如何将字符串 (HH:mm) 设置为当前日期的 UTC 时间并将其转换为本地时间

How to set String (HH:mm) to UTC time with current date and convert it to local time

我需要将 (HH:mm) 格式的字符串转换为本地时区(UTC 时间)。如何将当前日期添加到字符串中并将其转换为本地时间。

我试过使用日历

String utcTimeString = "06:00";
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar now = Calendar.getInstance(Locale.getDefault());
now.setTime(sdf.parse(utcTimeString));

你可以看看这个:

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());

//change the format according to your need
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

//Here you say to java the initial timezone. This is the secret
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
//Will print in UTC
System.out.println(sdf.format(calendar.getTime()));    

//Here you set to your timezone
sdf.setTimeZone(TimeZone.getDefault());
//Will print on your default Timezone
System.out.println(sdf.format(calendar.getTime()));

建议您对日期、时间、时区、偏移量、日历等使用现代 API:

java.time

这样做,很容易

  1. 解析你收到的时间
  2. 获取当前日期并
  3. 将它们组合成具有特定时区的日期时间表示

看这个小例子:

public static void main(String[] args) {
    // create a time object from the String
    LocalTime localTime = LocalTime.parse("06:00", DateTimeFormatter.ofPattern("HH:mm"));
    // print it once in an ISO format
    System.out.println(localTime.format(DateTimeFormatter.ISO_TIME));
    // receive the date of today
    LocalDate today = LocalDate.now();
    // then use the date and the time object to create a zone-aware datetime object
    ZonedDateTime zdt = LocalDateTime.of(today, localTime).atZone(ZoneId.of("UTC"));
    // print it
    System.out.println(zdt.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
}

输出为

06:00:00
2019-11-04T06:00:00Z[UTC]

您可以根据需要使用不同的 DateTimeFormatter 进行格式化。

像下面这样尝试。

public String getDateTimeInUTC(String yourTime){ 
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat currentDate= new SimpleDateFormat("MMM dd, yyyy ");

    String currentDateTime = currentDate.format(cal.getTime())+yourTime; // here concate your time with current date.
    System.out.println("Current date with given time: "+currentDateTime);

    SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy HH:mm", Locale.ENGLISH);
    df.setTimeZone(TimeZone.getTimeZone("UTC"));

    Date date = null;
    try {
       date = df.parse(currentDateTime);
    } catch (ParseException e) {
       e.printStackTrace();
    }
    df.setTimeZone(TimeZone.getDefault());
    String formattedDate = df.format(date);

    return formattedDate;
}

像下面这样调用getDateTimeInUTC

String strTime = "12:10"; // your string time in HH:mm format
String finalDateTime = getDateTimeInUTC(strTime);
System.out.println("Final date-time in UTC: "+finalDateTime);

输出:

Current date with  given time: Nov 04, 2019 12:10
Final date-time in UTC: Nov 04, 2019 18:10