您好我正在使用我的系统,而且我现在已经陷入了如何将月份和年份可分离地保存到单独的列中。在我的系统中,我有一个让用户打印报告的目标每月或每天,我的解决方案是将每月和每年的日期保存到每个单独的列中。这是可行的吗?抱歉我的英语不好。
答案 0 :(得分:2)
例如,您可以将系统日期视为字符串,因为可以从此资源中看到:How to convert current date into string in java?
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ; // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;
稍后您可以使用拆分来划分所需值(年,月)的字符串,例如,像这里:How to split a String by space
str = "2017-05-03";
String[] splited = str.split("-");
在最后一个例子中,#34; - ",也许,你需要使用" - "的ASCII码。唉,我忘了这个
答案 1 :(得分:2)
您可以使用JDK 8 Date-Time API中的LocalDate获取年份,月份和日期,并将其保存在数据库中:
LocalDate date = LocalDate.now();
int year = date.getYear();
int month = date.getMonthValue(); // or Month month = date.getMonth() if you want month names
int day = date.getDayOfMonth();
答案 2 :(得分:1)
其他答案在Java中使用LocalDate
是正确的。
对于数据库,请将您的列定义为仅限日期的类型,例如SQL Standard‘s type DATE
。
如果您的JDBC driver符合JDBC 4.2,则可以直接使用LocalDate
等java.time类型。
myPreparedStmt.setObject( … , myLocalDate ) ;
和
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
如果您的驱动程序不符合规定,请回退使用java.sql类型。您可以通过调用添加到旧类的新方法来转换为来回。但是尽可能简单地使用java.sql类型,使用java.time类完成所有实际工作。
myPreparedStmt.setDate( … , java.sql.Date.valueOf( myLocalDate ) ) ;
...和...
LocalDate ld = myResultSet.getDate( … ).toLocalDate() ;