日期和时间转换始终是我的薄弱环节。我有以下字符串格式的值:
现在我需要将此日期(我已经知道时区)转换为UTC日期。
答案 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