将已知时区的日期转换为UTC日期

时间:2015-08-20 06:47:08

标签: java datetime timezone timezone-offset

日期和时间转换始终是我的薄弱环节。我有以下字符串格式的值:

  1. String date =“2015-08-21 03:15”此日期的时区为
  2. String timeZone =“GMT + 05:30”;
  3. 现在我需要将此日期(我已经知道时区)转换为UTC日期。

5 个答案:

答案 0 :(得分:1)

您可以尝试这样:

  

方法1:使用Java日期:

IVsExpansion
  

方法2:使用Joda时间(推荐)

//Your input date string
String date="2015-08-21 03:15";

// date format your string
String format = "yyyy-MM-dd HH:mm";

//Create SimpleDateFormat instance
SimpleDateFormat sdf = new SimpleDateFormat(format);

// Convert Local Time to UTC 
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

//parse your input date string to UTC date
Date gmtTime = new Date(sdf.parse(date));

答案 1 :(得分:1)

如果您在“GMT + 05:30”时区获得时间,下一个代码会将其转换为UTC时区:

String strDate = "2015-08-21 03:15";
String timeZone="GMT+05:30";
String format = "yyyy-MM-dd HH:mmz";
SimpleDateFormat formatter = new SimpleDateFormat(format);
Date dateStr = formatter.parse(strDate+timeZone);
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String formattedDate = formatter.format(dateStr);
System.out.println("UTC datetime is: "+formattedDate);

答案 2 :(得分:0)

你可以看到:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Date date = null;
try {
    //Here you say to java the initial timezone. This is the secret
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    date = sdf.parse(review);
} catch (ParseException e) {
    e.printStackTrace();
  }

//Here you set to your timezone
sdf.setTimeZone(TimeZone.getDefault());
System.out.println(sdf.format(date));

答案 3 :(得分:0)

java中的Date表示自1970年以来的毫秒数。仅此数字没有特定的时区。这意味着如果您使用new Date()创建日期,则会获得自1970年以来的当前毫秒数,如果您在其上调用toString,则此值将在您当前的区域设置时区中表示。此数字表示的实际时间是特定于时区的。这就是您可以在TimeZone和格式类上设置Calendar的原因。

要使用特定TimeZone实例化日历,您可以执行以下操作:

public static Calendar getUtcCalendar() {
   GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
}

所以要将Date转换为UTC TimeZone中的特定时间:

Calendar calendar = getUtcCalendar();
calendar.setTime(date);
return calendar;

答案 4 :(得分:0)

因为您只需要Java-8解决方案:

String input = "2015-08-21 03:15";
String offsetInfo = "GMT+05:30";

LocalDateTime ldt = 
  LocalDateTime.parse(input, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm"));
ZoneOffset offset = 
  ZoneOffset.of(offsetInfo.substring(3)); // GMT-prefix needs to be filtered out

LocalDateTime result = 
  ldt.atOffset(offset).withOffsetSameInstant(ZoneOffset.UTC).toLocalDateTime();
System.out.print(result); // output: 2015-08-20T21:45