将已知时区的日期转换为 UTC 日期
Convert date with known timezone to UTC date
日期和时间转换一直是我的弱项link。我有以下字符串格式的值:
- String date="2015-08-21 03:15" 此日期的时区是
- 字符串时区="GMT+05:30";
现在我需要将这个我已经知道时区的日期转换为 UTC 日期。
您可以看到:
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));
你可以这样试试:
Approach 1: Using Java Date:
//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));
Approach 2: Using Joda time (recommended)
String dateString = "2015-08-21 03:15:00+5:30";
String pattern = "yyyy-MM-dd HH:mm:ssZ";
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern);
DateTime dateTime = dtf.parseDateTime(dateString);
System.out.println(dateTime);
java中的一个Date
表示自1970年以来的毫秒数。单独这个数字没有特定的时区。这意味着如果您使用 new Date()
创建日期,您将获得自 1970 年以来的当前毫秒数,如果您对其调用 toString,则该值将以您当前的语言环境时区表示。这个数字代表的实际时间是时区特定的。这就是为什么您可以在 Calendar
上设置 TimeZone
和格式 类.
的原因
要实例化具有特定时区的日历,您可以这样做:
public static Calendar getUtcCalendar() {
GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
}
所以要将 Date
转换为 UTC 时区中的特定时间:
Calendar calendar = getUtcCalendar();
calendar.setTime(date);
return calendar;
如果在 "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);
因为您只想要 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
日期和时间转换一直是我的弱项link。我有以下字符串格式的值:
- String date="2015-08-21 03:15" 此日期的时区是
- 字符串时区="GMT+05:30";
现在我需要将这个我已经知道时区的日期转换为 UTC 日期。
您可以看到:
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));
你可以这样试试:
Approach 1: Using Java Date:
//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));
Approach 2: Using Joda time (recommended)
String dateString = "2015-08-21 03:15:00+5:30";
String pattern = "yyyy-MM-dd HH:mm:ssZ";
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern);
DateTime dateTime = dtf.parseDateTime(dateString);
System.out.println(dateTime);
java中的一个Date
表示自1970年以来的毫秒数。单独这个数字没有特定的时区。这意味着如果您使用 new Date()
创建日期,您将获得自 1970 年以来的当前毫秒数,如果您对其调用 toString,则该值将以您当前的语言环境时区表示。这个数字代表的实际时间是时区特定的。这就是为什么您可以在 Calendar
上设置 TimeZone
和格式 类.
要实例化具有特定时区的日历,您可以这样做:
public static Calendar getUtcCalendar() {
GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
}
所以要将 Date
转换为 UTC 时区中的特定时间:
Calendar calendar = getUtcCalendar();
calendar.setTime(date);
return calendar;
如果在 "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);
因为您只想要 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