是否可以将java.util.Date转换为int

问题描述

您好,我正在开发一个应用程序,其中有一个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,这是当前时间(以纳秒为单位)吗? 谢谢您的帮助!

解决方法

两个建议:

  1. 使用现代Java日期和时间API java.time进行日期工作。
  2. 如果您需要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?,详细说明如何将LocalDateJFormattedTextField一起使用。
,

您是说以下意思吗?

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日)。