Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:日期操作_Java_Calendar_Jtextfield_Date Formatting - Fatal编程技术网

Java:日期操作

Java:日期操作,java,calendar,jtextfield,date-formatting,Java,Calendar,Jtextfield,Date Formatting,我正在尝试使用SimpleDataFormat和Calendar对象修改日期。然后将修改后的日期写入我的数据库。问题是,我的方法无法编译。它表示:不兼容的类型字符串不能转换为日期。我错过了什么? 这是我的方法 public Date expiredItem() { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar expiredDate = Calendar.getInstance();

我正在尝试使用SimpleDataFormat和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;博士 细节 这个问题还不清楚,但听起来好像您正在尝试获取当前日期,添加一些天数(以文本形式输入)以确定“到期”日期,并将其显示为文本

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

获取当前日期需要时区。在任何特定的时刻,全球各地的日期都会因地区而异

ZoneId z = ZoneId.of( "America/Montreal" );
您可以使用JVM的当前默认时区。但是要知道,JVM中任何应用程序的任何线程中的任何代码都可以随时更改默认值。因此,如果至关重要,请询问用户所需/预期的区域

ZoneId z = ZoneId.systemDefault() ;
若要表示仅日期的值,而不包含一天中的时间和时区,请使用

将天数文本解析为
long

String input = timeFld.getText() ;
long days = Long.parseLong( input );
String output = expiration.toString();
将天添加到您的
今天
日期

LocalDate expiration = today.plusDays( days ) ;
要以标准ISO 8601格式YYYY-MM-DD生成表示该值的字符串,只需调用
toString

String input = timeFld.getText() ;
long days = Long.parseLong( input );
String output = expiration.toString();
2017-01-23

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

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

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

LocalDate expiration = sqlDate.toLocalDate();

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

我刚刚发现我的返回语句是字符串,但我的方法返回日期。但是我如何解决这个问题,让我的方法返回formattedDate?如果您只想获取类型为
java.util.Date
的对象,那么返回
expiredDate.getTime())就这么简单。这里不需要格式化。或者,如果您想要字符串,请格式化它并更改方法的返回类型。将方法的返回类型更改为字符串?您好,谢谢您的回复,是的,我尝试将返回类型更改为字符串,但我的数据库需要将日期类型写入其中。我想我应该返回Date类型的方法,然后在写入数据库的方法中将其更改为String?SimpleDateFormat用于从字符串解析日期或将日期格式化为字符串。如果您只想使用SimpleDataFormat修改现有日期,则这种方法是错误的。正如Meno Hochschild所说,您应该返回
expiredDate.getTime()