简单的代码,但有些问题!我是Kotlin的新手,试图获取日期字符串并将其转换为Date()格式。当我转换回来时,它会给出错误的月份。例如:
var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 1, 20)
val date: Date = cal.time
println(date) //This prints: Tue Feb 20 23:25:59 EST 2018
为什么我在月份设定为1(1月)时获得2月份?
最终,我想采用“MM / dd / yyyy”格式的字符串并将其转换为Date()格式,但似乎遇到了麻烦(需要支持API 15),而使用Calendar是我的尝试在没有需要以后API的日期格式化程序的情况下执行此操作。有关更好方法的任何想法吗?
答案 0 :(得分:5)
Java中Calendar
类的月份为0索引。
cal.set(2018, 0, 20)
就是你的意思。
然而,这就是为什么使用Calendar类中定义的最终int字段通常更好,而不是硬编码数字。在这种情况下,那是JANUARY
。 See here
这样就可以了:
cal.set(2018, Calendar.JANUARY, 20)
答案 1 :(得分:1)
月份为0,因此0表示1月,1表示2月,依此类推
答案 2 :(得分:1)
格里高利和朱利安日历中的第一个月是 1月份是0;最后一个取决于一个月的月数 年。
所以,设置一月
var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 0, 20) // set Month field to Zero
val date: Date = cal.time
println(date) //This prints: Sat Jan 20 23:25:59 EST 2018
答案 3 :(得分:1)
使用Calendar
获取月份
Calendar calendar=Calendar.getInstance();
calendar.set(2018, Calendar.JANUARY, 20)//set date format
val date: Date = calendar.time
println(date)//print : 2018 Jan 20
快乐的编码!!
答案 4 :(得分:0)
为什么我在月份设定为1(1月)时获得2月份?
您正在 2月,因为索引为1 = FEB
在cal.set(2018, month index, 20)
方法中,具有MONTH索引参数的第二个参数索引如下:
0 = JAN
1 = FEB
2=MARCH
3=APRIL
4=MAY
5=JUNE
6=JULY
7=AUG
8=SEPT
9=OCT
10=NOV
11=DEC
答案:使用Calendar.JANUARY
或0
解决问题
var cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(2018, 0, 20)
val date: Date = cal.time
println(date) //This prints: Tue Jan 20 23:25:59 EST 2018