在 gson 构建器中添加格式日期后时间不正确
Time incorrect after add format date in gson builder
我有 json 从 mongodb
返回的字符串。
[{"_id":"578bb51aa51d15940688809e","name":"aaa","date":"2016-07-20T11:47:39.302Z"}]
我使用 gson
来转换 Java 对象。我得到了Unparseable date: "2016-07-20T11:47:39.302Z"
。所以我将日期格式添加到 gson
builder.
Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();
日期结果为Wed Jul 20 11:47:39 MMT 2016
。时间是incorrect
.
日期字符串的更好日期格式模式是什么?
如何根据给定的日期字符串选择合适的日期格式模式?
如果我没记错的话,您的时区信息有问题。 JavaScript Date
object and the Java Date
object represent a point in universal coordinated time (UTC)。 JavaScript Date
对象和 Java Date
对象都不包含时区信息。
旁注: Java Date
对象 实际上包含时区信息,这就是为什么你当您调用 date.toString()
时,请查看时区(在您的情况下为 MMT
)。不过,这个时区应该 被忽略 ,因为时区的不规则性突出了一些 many issues 和 Java 7- date/time classes.
GsonBuilder().setDateFormat()
方法设置 Java Date
对象应序列化和反序列化的字符串格式。此格式不包含任何时区信息,因为 Date
对象不包含该信息。
为了显示您的Date
对象代表正确时区的UTC时间,您必须提供该时区。这不是在使用 Gson
反序列化期间完成的,而是在您实际显示 date/time:
时完成的
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getDefault());
String zonedDateTime = simpleDateFormat.format(date);
Android 还附带一个方便的 DateUtils
class 来代替 SimpleDateFormat
来为您处理时区信息,以及 Locale
信息。
DateUtils.formatDateTime(getContext(), date.getTime(),
DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_ABBREV_ALL);
我有 json 从 mongodb
返回的字符串。
[{"_id":"578bb51aa51d15940688809e","name":"aaa","date":"2016-07-20T11:47:39.302Z"}]
我使用 gson
来转换 Java 对象。我得到了Unparseable date: "2016-07-20T11:47:39.302Z"
。所以我将日期格式添加到 gson
builder.
Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();
日期结果为Wed Jul 20 11:47:39 MMT 2016
。时间是incorrect
.
日期字符串的更好日期格式模式是什么?
如何根据给定的日期字符串选择合适的日期格式模式?
如果我没记错的话,您的时区信息有问题。 JavaScript Date
object and the Java Date
object represent a point in universal coordinated time (UTC)。 JavaScript Date
对象和 Java Date
对象都不包含时区信息。
旁注: Java Date
对象 实际上包含时区信息,这就是为什么你当您调用 date.toString()
时,请查看时区(在您的情况下为 MMT
)。不过,这个时区应该 被忽略 ,因为时区的不规则性突出了一些 many issues 和 Java 7- date/time classes.
GsonBuilder().setDateFormat()
方法设置 Java Date
对象应序列化和反序列化的字符串格式。此格式不包含任何时区信息,因为 Date
对象不包含该信息。
为了显示您的Date
对象代表正确时区的UTC时间,您必须提供该时区。这不是在使用 Gson
反序列化期间完成的,而是在您实际显示 date/time:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getDefault());
String zonedDateTime = simpleDateFormat.format(date);
Android 还附带一个方便的 DateUtils
class 来代替 SimpleDateFormat
来为您处理时区信息,以及 Locale
信息。
DateUtils.formatDateTime(getContext(), date.getTime(),
DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_ABBREV_ALL);