Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么二月是三月?_Java_Android_Simpledateformat - Fatal编程技术网

Java 为什么二月是三月?

Java 为什么二月是三月?,java,android,simpledateformat,Java,Android,Simpledateformat,我无法解决这个问题 我写了这段代码: public static String getMonthName(int year, int month, int day){ Locale locale = Locale.getDefault(); SimpleDateFormat sdf = new SimpleDateFormat("MMMM",locale); Date date = new Date(); date.setDate(day); date.s

我无法解决这个问题

我写了这段代码:

public static String getMonthName(int year, int month, int day){
    Locale locale = Locale.getDefault();
    SimpleDateFormat sdf = new SimpleDateFormat("MMMM",locale);
    Date date = new Date();
    date.setDate(day);
    date.setMonth(month);
    date.setYear(year);
    return sdf.format(date);
}
它工作得很好,但是当月份=1(即二月)时,月份名称是三月而不是二月!为什么?

此代码在所有其他日期和月份都运行良好

还有另一种方法可以翻译月份名称吗


请帮助我……

根据您调用函数的方式(例如使用当前日期作为2013年不存在的2月29日),您可以使月份自动递增

我建议使用此功能以避免问题:

public static String getMonthName(int month){
    Locale locale = Locale.getDefault();
    SimpleDateFormat sdf = new SimpleDateFormat("MMMM",locale);
    Date date = new Date();
    date.setDate(1);
    date.setMonth(month);
    date.setYear(2012);
    return sdf.format(date);
}

根据您调用函数的方式(例如使用当前日期作为2013年不存在的2月29日),您可以使月份自动递增

我建议使用此功能以避免问题:

public static String getMonthName(int month){
    Locale locale = Locale.getDefault();
    SimpleDateFormat sdf = new SimpleDateFormat("MMMM",locale);
    Date date = new Date();
    date.setDate(1);
    date.setMonth(month);
    date.setYear(2012);
    return sdf.format(date);
}

这是因为月份从零指数开始,所以您应该使用此逻辑

if(day >0)
{
day =day -1;
}

这是因为月份从零指数开始,所以您应该使用此逻辑

if(day >0)
{
day =day -1;
}

在获得月份名称时,日期和年份的相关性是什么?另外,你能发布几个输出吗?(例如,month=0、1、5、10?)在将其设置为date对象之前,逐月递增一次。它对我来说运行良好0=一月、1=二月和2=MarchMany感谢您的帮助我解决了njzk2问题。今天是29天,2月有28天,因此,当过程超过29天时,结果是3月而不是2月…在获得月份名称时,日期和年份的相关性是什么?此外,您可以发布几个输出吗?(例如,month=0、1、5、10?)在将其设置为date对象之前,逐月递增一次。它对我来说运行良好0=一月、1=二月和2=MarchMany感谢您的帮助我解决了njzk2问题。今天是29日,2月有28天,所以当过程通过29日,结果是3月而不是2月…非常感谢。2021年2月28日也是我花了一整天寻找解决方案的日子。这对我来说很好。非常感谢。2021年2月28日也是我花了一整天寻找解决方案的日子。这对我来说很有效。