日历返回错误的当前日期 Android

5
为什么这段代码会返回0001-02-05?
public static String getNowDate() throws ParseException
{        
    return Myformat(toFormattedDateString(Calendar.getInstance()));
}

我将代码更改为:

public static String getNowDate() throws ParseException
{        
    Calendar temp=Calendar.getInstance();
    return temp.YEAR+"-"+temp.MONTH+"-"+temp.DAY_OF_MONTH;
}

现在它返回1-2-5。

请帮我获取实际日期。我只需要Sdk日期。


谢谢!但是Alex已经帮我了。 - Eduardoxvii
4个回答

16

Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTHint常量(在API文档中查找)...

所以,如@Alex所述,要从Calendar实例创建格式化的String,您应该使用SimpleDateFormat。

但是,如果您需要特定字段的数值表示,请使用get(int)函数:

int year = temp.get(Calendar.YEAR);
int month = temp.get(Calendar.MONTH);
int dayOfMonth = temp.get(Calendar.DAY_OF_MONTH);

警告!月份从0开始计算!!!我因此犯了一些错误!


对此警告点个赞。最蠢的部分是Calendar.MONTH从零开始,但是DatePickerDialog对年份月份的输入却不是这样。安卓,你得选一个。 /: - zarazan
这条评论是我的问题的解决方案 - “警告!月份从0开始!!!我因此犯了一些错误!” 为什么要这样幽默,将月份从0到11开始计算,而不是从1到12呢? - Anton Kizema

13

使用SimpleDateFormat

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());

您正在使用常量与Calendar.get()方法一起使用。


3
不,看起来我不是Jon Skeet;-) - Alex
还有很长的路要走 :) 不过还是谢谢,我会原封不动地接受它 ;) - Alex

2
为什么不使用SimpleDateFormat
public static String getNowDate() {
  return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
}

0

你做错了。改成:

return temp.get(Calendar.YEAR)+"-"+ (temp.get(Calendar.MONTH)+1) +"-"+temp.get(Calendar.DAY_OF_MONTH);

另外,您可能想要查看日期

Date dt = new Date();
//this will get current date and time, guaranteed to nearest millisecond
System.out.println(dt.toString());
//you can format it as follows in your required format
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(dt));

这些很丑。SimpleDateFormat 正好做 OP 需要的事情... 而 Date.toString() 不能被依赖! - ppeterka
哇,真的吗?OP想要修复他的代码。我给了他修复的方法。并且我添加了一条注释,提醒他可能需要查看日期。你建议使用SimpleDateFormat,但你完全误解了它。SimpleDateFormat不能给你当前的日期时间,它只能格式化给定的日期时间。那么你建议从哪里获取当前的日期时间?Date还是Calendar?而你因为这个问题给我的答案打了-1分?难以置信... - ADTC
获取当前日期时间时,Date 可以保证精确到毫秒,比 Calendar 更好。就实际目的而言,它是非常可靠的。另外需要注意的是,我刚刚更新了答案,表明当我需要格式化日期时不会依赖于 Date.toString()。我使用原始的 Date 对象。 - ADTC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接