[英]add 1 month from current date using java.sql.Date
您好,我對java.sql.Date的結果有疑問。 這是我的代碼,從當前日期開始增加了1周
Date kini = new Date();
java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime()+7*24*60*60*1000);
如果當前日期為2016-02-27,則我的MySQL中的結果為2016-03-05。 但是,如果我想使用此行代碼從當前日期開始添加1個月(對於我來說,它總是31天)
java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime()+31*24*60*60*1000);
應該是2016-03-28,但在我的MySQL結果中是2016-02-05。 任何人都可以幫助我解決此問題嗎?
其他答案使用過時的舊日期時間類。 在證明它們令人困惑,麻煩和有缺陷之后,它們已被Java 8及更高版本中的java.time框架取代。
不要在業務邏輯中使用java.sql類。 它們是那些舊的日期時間類的混亂擴展,並且是設計不良的hack。 僅將它們用於將數據移入/移出數據庫。 立即轉換為java.time類型。
要進行轉換,請使用添加到舊類中的新方法。
就java.sql.Date
,它假裝為僅包含日期的值,而沒有日期時間或時區。 java.time類包含一個真正的僅日期值LocalDate
。 要將java.sql.Date
轉換為java.time.LocalDate
,請調用java.sql.Date::toLocalDate
。
LocalDate ld = mySqlDate.toLocalDate();
內置真實月份。
LocalDate monthLater = ld.plusMonths( 1 );
轉換回java.sql以存儲在數據庫中。
java.sql.Date sqlDate = java.sql.Date.valueOf( monthLater );
希望有一天,我們將看到JDBC驅動程序已更新為直接支持java.time類型。 然后,java.sql類型將消失為過去的舊文物。 但在那之前,我們需要執行這些java.sql中 ↔java.time轉換。
更新:JDBC 4.2和更高版本提供了直接使用PreparedStatement::setObject
傳遞java.time類型,以及使用ResultSet::getObject
進行ResultSet::getObject
。 因此,無需轉換為java.sql類型。
使用日歷:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Date result = cal.getTime();
解決您的問題的一種方法是使用DATE_ADD()
函數在MySQL中更改日期:
DATE_ADD(yourDate, INTERVAL 1 MONTH)
解決方案的問題是,您沒有long
進行計算。
您必須將31*24*60*60*1000
替換為31l*24l*60l*60l*1000l
。
這是更正的代碼段:
public static void main (String[] args)
{
Date kini = new Date();
java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime() + 31l*24l*60l*60l*1000l);
System.out.println(jadwalPengobatan);
}
請注意,這只會修正您在當前日期加上31
天的情況下的計算結果。 如果你正在尋找增加一個月可以是30
, 28
或29
天還那么也許你應該使用的Calendar
。
今天的日期:
2016-02-27
輸出:
2016-03-29
SimpleDateFormat date= new SimpleDateFormat("dd/MM/yyyy");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, 1);
String output= date.format(calendar.getTime());
java.sql.Date jadwalPengobatan = new java.sql.Date(output);
您可以使用Calendar
進行以下操作:
Date kini = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(kini);
cal.add(Calendar.DATE, 7); // add 10 days, e.g. 1 week
cal.add(Calendar.DATE, 31); // add 31 days, e.g. ~1 month
java.sql.Date jadwalPengobatan = new java.sql.Date(cal.getTime());
另請參閱此討論 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.