jMonthChooser显示它返回月份的整数值,但是在选择任何月份时始终返回01作为值

时间:2019-01-11 20:53:35

标签: java simpledateformat jcalendar

{
    SimpleDateFormat myformat = new SimpleDateFormat("MM");             
    String abc = myformat.format(jMonthChooser2.getMonth());
}

jMonthChooser始终返回01

2 个答案:

答案 0 :(得分:2)

java.time

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MM");
    String monthString = monthFormatter.format(Month.of(jMonthChooser2.getMonth() + 1));

我在从JMonthChooser得到的月份号上加1以补偿,因为我怀疑它给了我们一个从0开始的月份号(0到11),而我知道{{1} }枚举数与人类一样,从1到12。如果您发现Month丑陋(实际上),则可以选择:

+ 1

选择不那么神秘的人。

由于 String monthString = monthFormatter.format(Month.values()[jMonthChooser2.getMonth()]); 非常麻烦且已过时,我正在使用Java.time(现代Java日期和时间API)。与旧的日期时间类相比,使用它要好得多。

免责声明:我不知道SimpleDateFormat,也没有在该类中测试过我的代码。

您的代码出了什么问题?

当您将0-11范围内的数字输入JMonthChooser时,格式化程序会将其理解为自1970年1月1日UTC时间00:00以来的毫秒数。因此,无论您选择哪个月,要尝试格式化的日期时间都在该日期的几毫秒之内,因此该月始终为一月(仅在某些时区中,它仍然是1969年12月)。

链接

答案 1 :(得分:1)

首先要注意的是,我们没有足够的代码来准确回答您的问题。

第二,我建议您添加一个属性更改侦听器,以查看是否正在做其他可能导致此问题的事情。

使用下面的代码在选择之后立即获得所选月份的打印内容。

JMonthChooser jmc = new JMonthChooser();
jmc.addPropertyChangeListener("month", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent e) {
       System.out.println(e.getNewValue()));
    }
});

我最好的猜测是您正在直接根据JMonthChooser运行此程序,并且您始终在读取默认月份