【发布时间】:2020-09-05 08:03:39
【问题描述】:
我尝试在互联网上搜索并在 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
}
这就是我的数据类的样子:
数据类位置 (
有效ID:整数,
值名称:字符串,
val图像:字符串,
val 街道:字符串,
val 城市:字符串,
val zip:整数,
@SerializedName("date_of_origin")
val originDate : GregorianCalendar?,
val停车:布尔=真,
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}
【问题讨论】:
-
Calender.MONTH 从 0 开始(对于一月,link),因此您必须减去一个才能获得正确的日期。
-
你好,我认为它是 this 的副本。那是因为 android 日历 MONTH 从 0 位置开始
-
使用
java.time... -
在这里它有多直观(或不直观)并不重要,因为在这种情况下它工作正常,它只是不是 OP 所期望的输出,但它不会错了@Hawklike
-
我建议你不要使用
GregorianCalendar。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的LocalDate。
标签: java android kotlin gregorian-calendar