将datetime转换为utc格式

时间:2016-09-24 09:35:24

标签: android datetime simpledateformat

我有一个带有特定时区的字符串格式的日期时间,但我无法想出将其转换为UTC格式,以便我可以将其发送到服务器后端并在那里将其保存到数据库中。

在日期和时间选择器之后获得的字符串:" 30-9-2016 15:10 Asia / Kolkata" 需要将其转换为UTC格式

3 个答案:

答案 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());

b)Joda-Time-Android

查看@ 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