我有一个带有特定时区的字符串格式的日期时间,但我无法想出将其转换为UTC格式,以便我可以将其发送到服务器后端并在那里将其保存到数据库中。
在日期和时间选择器之后获得的字符串:" 30-9-2016 15:10 Asia / Kolkata" 需要将其转换为UTC格式
答案 0 :(得分:2)
尝试使用joda http://www.joda.org/joda-time/。
此代码段会产生“2016-09-30T09:40:00.000Z”
public String convert(String timeStamp) {
DateTimeFormatter fmt = DateTimeFormat.forPattern("d-M-yyyy HH:mm ZZZ");
DateTime dt = fmt.parseDateTime(timeStamp);
return dt.toInstant().toString();
}
答案 1 :(得分:0)
您可以使用'currentDate.utc()。format()'将日期转换为UTC。
答案 2 :(得分:0)
类SimpleDateFormat似乎缺少解析时区标识符的选项,如“Asia / Kolkata”(既不是区域名也不是偏移量)。没有模式符号VV表示这种tz信息。
如果你坚持使用SimpleDateFormat
,你可以通过使用字符串预处理来避免这种限制:
input = input.replace("Asia/Kolkata", "GMT+05:30");
// and then use pattern symbol "z" or "Z"
主要缺点是:您对输入中使用的具体tz标识符进行了硬连线假设。
但是,至少有三个其他库能够使用模式符号“VV”解析标识符“Asia / Kolkata”或类似物。
a)ThreetenABP - Java-8中java.time-package的backport的android改编
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-yyyy HH:mm VV");
Instant instant = ZonedDateTime.parse(input, dtf).toInstant();
java.util.Date jud = new java.util.Date(instant.toEpochMilli());
查看@ sven4all的答案
c)我的图书馆Time4A
ChronoFormatter<Moment> f =
ChronoFormatter.ofMomentPattern(
"d-M-yyyy HH:mm VV", PatternType.CLDR, Locale.ROOT, ZonalOffset.UTC);
Moment moment = f.parse(input);
java.util.Date jud = TemporalType.JAVA_UTIL_DATE.from(moment);
然而,为了存储在数据库中,您可能需要进行不同的转换,例如类型java.sql.Timestamp
。