我尝试在互联网上搜索,并在 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
}
这就是我的数据类的样子:
data class Location ( val id : Int, val name : String, val image : String, val street : String, val city : String, val zip : Int, @SerializedName("date_of_origin") val originDate : GregorianCalendar?, val parking : Boolean = true, var imageBitmap : Bitmap? = null )
Whenever I try to set the dateText like this:
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}
最佳答案
GregorianCalendar
表示月份,数字范围为 0
到 11
。这意味着数字 0
表示为 1 月,11
表示为 12 月。
因此,如果您的 API 未使用与 Java 实现相同的逻辑,则需要减去 1
。
更新:
GregorianCalendar(2016, 1, 30)
被理解为 2 月 30 日。这会在内部转换为 3 月 1 日,因此当您从该日期减去一个月时,就会得到 2 月 1 日。您需要创建一个带有减去月份数的 GregorianCalendar 类的实例,即。一月为 0,二月为 1,依此类推。
关于java - Android - GregorianCalendar 显示错误的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61887963/