问题描述
您好,我正在开发一个应用程序,其中有一个jformattedtextfield,其当前日期为yyyy / mm / dd格式,我想只将这些值设置为int。但是问题和欧盟正在做的事情是返回更多的值
jformattedtextfield textId = new jformattedtextfield(new SimpleDateFormat("yyyy/MM/dd"));
textId.setValue(new java.util.Date());
textId.setBounds(20,310,100,25);
Date data = (Date)textId.getValue();
long dataFinal = data.getTime();
如何仅将INT的值设为YYYY / MM / DD? 现在可变日期最终值长会给出1603883824076,这是当前时间(以纳秒为单位)吗? 谢谢您的帮助!
解决方法
两个建议:
- 使用现代Java日期和时间API java.time进行日期工作。
- 如果您需要
int
,请使用从1970年1月1日开始算起的天数。
由于java.time为转换提供了toEpochDay
方法,因此这两个建议可以很好地结合在一起:
Format localDateFormat = DateTimeFormatter.ofPattern("uuuu/MM/dd")
.toFormat(LocalDate::from);
JFormattedTextField textId = new JFormattedTextField(localDateFormat);
textId.setValue(LocalDate.now(ZoneId.systemDefault()));
textId.setBounds(20,310,100,25);
LocalDate data = (LocalDate) textId.getValue();
int dataFinal = Math.toIntExact(data.toEpochDay());
今天(2020年10月29日)将为您提供18564。
…此刻变量datefinal较长,给出1603883824076 这是当前时间(以纳秒为单位)吗? …
它们是自1970年1月1日UTC 00:00以来的毫秒数。您可能已经注意到,它们不适合int
。
链接
- Oracle tutorial: Date Time解释如何使用java.time。
- My answer到问题如何制作具有固定日期格式的jtextfield?,详细说明如何将
LocalDate
与JFormattedTextField
一起使用。
您是说以下意思吗?
JFormattedTextField textId = new JFormattedTextField(new SimpleDateFormat("yyyy/MM/dd"));
textId.setValue(new java.util.Date());
textId.setBounds(20,25);
String str = textId.getText().replaceAll("/","");
int integer = Integer.parseInt(str);
integer
的值为20201028(因为今天的日期是2020/10/28,即2020年10月28日)。