Kotlin DateTimeformat返回错误的月份

时间:2018-01-02 04:32:47

标签: android kotlin datetime-format

简单的代码,但有些问题!我是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的日期格式化程序的情况下执行此操作。有关更好方法的任何想法吗?

5 个答案:

答案 0 :(得分:5)

Java中Calendar类的月份为0索引。

cal.set(2018, 0, 20)

就是你的意思。

然而,这就是为什么使用Calendar类中定义的最终int字段通常更好,而不是硬编码数字。在这种情况下,那是JANUARYSee 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.JANUARY0解决问题

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