Kotlin数据类和json-GregorianCalendar显示错误的日期

问题描述 投票:2回答:1

[我尝试搜索互联网,并在StackOverlflow上找到了很多有关同一主题的问题,但找不到我能理解的任何东西...

所以,我有这个数据类,其中包含GregorianCalendar类型的dateOfOrigin。使用gson,我将转换所有json并返回包含所有位置的Observable数组。在json文件中,我将dateOfOrigin添加为这样的对象:

{
    "id": 6,
    "name": "Fuse",
    "image": "fuse.jpg",
    "street": "Blaesstraat 208",
    "city": "Brussels Hoofdstedelijk Gewest",
    "zip": 1000,
    "date_of_origin": {"year":1994,"month":4,"dayOfMonth":16},
    "parking": true
}

这就是我的数据类的样子:

数据类位置(val id:整数val名称:字符串,val image:字符串,val street:字符串,val city:字符串,val zip:整数,@SerializedName(“ date_of_origin”)val originDate:GregorianCalendar ?,val parking:布尔值= true,var imageBitmap:位图? =空)

每当我尝试这样设置dateText时:

originDate?.let {
    dateText = "${it.get(Calendar.DAY_OF_MONTH)} ${it.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault())} ${it.get(Calendar.YEAR)}"

    dateText = resources.getString(R.string.origin_date, dateText)
}

它输出16 May 1994而不是16 Apr 1994

我不知道如何解决此问题...

编辑在大多数情况下,从月份中减去1似乎可以解决此问题。仍然,我有一个结果应该输出30 Jan 2016但显示1 Feb 2016

"date_of_origin": {"year":2016,"month":1,"dayOfMonth":30}
java android json kotlin gregorian-calendar
1个回答
2
投票

Gregorian日历代表月份,其数字范围为011。这意味着数字0表示为1月,11表示为12月。

因此,如果您的API使用的逻辑与Java实现不同,则需要减去1

更新:GregorianCalendar(2016, 1, 30)被理解为2月30日。这是由Java日历翻译成的3月1日,因此,减去一个月,便得到2月1日。您需要已经用减去的月份数(即)构造了GregorianCalendar类的实例。一月为0,二月为1,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.