{
SimpleDateFormat myformat = new SimpleDateFormat("MM");
String abc = myformat.format(jMonthChooser2.getMonth());
}
此jMonthChooser
始终返回01
。
答案 0 :(得分:2)
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运行此程序,并且您始终在读取默认月份