Java:日期操作

标签 java calendar jtextfield date-formatting

我正在尝试使用 SimpleDateFormat 和 Calendar 对象修改日期。然后将修改日期写入我的数据库。问题是,我的方法无法编译。它说:不兼容类型字符串无法转换为日期。我错过了什么? 这是我的方法

public Date expiredItem() {

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Calendar expiredDate = Calendar.getInstance();
    expiredDate.add(Calendar.DATE, Integer.parseInt(timeFld.getText()));
    //timeFld is JTextField.getText() casted into int

    // The confusing thing is, below Dialog works as i expected but not on my
    // method return.
    JOptionPane.showMessageDialog(null, "Expiration Date: " +       
    dateFormat.format(expiredDate.getTime()));
    return  dateFormat.format(expiredDate.getTime()); //Erroneous code
}

最佳答案

tl;博士

myPreparedStatement.setObject( 
    … ,
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .plusDays( … )
)

详细信息

问题不清楚,但听起来您正在尝试获取当前日期,添加一些天数(作为文本输入)以确定“到期”日期,并将其显示为文本。

您正在使用令人困惑、麻烦的旧日期时间类,这些类现在已成为遗留的,已被 java.time 类取代。

获取当前日期需要时区。对于任何特定时刻,全局各地的日期因地区而异。

ZoneId z = ZoneId.of( "America/Montreal" );

您可以使用 JVM 当前的默认时区。但要知道,JVM 内任何应用程序的任何线程中的任何代码都可以随时更改默认值。因此,如果至关重要,请询问用户所需/预期的区域。

ZoneId z = ZoneId.systemDefault() ;

要表示不含日期和时区的仅日期值,请使用 LocalDate .

LocalDate today = LocalDate.now( z );

将天数文本解析为long

String input = timeFld.getText() ;
long days = Long.parseLong( input );

在您的今天日期中添加天数。

LocalDate expiration = today.plusDays( days ) ;

要生成以标准 ISO 8601 格式 YYYY-MM-DD 表示该值的字符串,只需调用 toString

String output = expiration.toString();

2017-01-23

如果您的 JDBC 驱动程序符合 JDBC 4.2 或更高版本,那么您可以通过 PreparedStatement::setObjectResultSet::getObject 与数据库交换此 LocalDate 方法。

对于较旧的驱动程序,请使用添加到旧类的新转换方法在 java.sql.Date 类之间进行转换。

java.sql.Date sqlDate = java.sql.Date.valueOf( expiration );

LocalDate expiration = sqlDate.toLocalDate();

提示:将执行业务逻辑(计算到期)的代码与收集输入和显示结果的用户界面工作分开。

关于Java:日期操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005394/

相关文章:

java - JAVA中动态加载一个类-Anomaly

pdf - 使用 GAS 将带有事件的 Google 日历导出为 PDF

java - JTextField 中的输出,每行读取时都能保持刷新

java - 启用后如何清除文本字段?

Java:扫描器读取整数,但不在 while/for 循环中使用它

java - 如果在局部变量中使用了 wicket 模型,我是否必须分离它们?

swift - 如何根据周使用 FSCalendar 隐藏第二天

ruby-on-rails - 创建日历/计划程序应用程序 - Ruby on Rails

java - 无限循环阻止文本字段接受输入

java.util.UUID.fromString 不检查长度