簡體   English   中英

使用java.sql.Date從當前日期開始增加1個月

[英]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.time

其他答案使用過時的舊日期時間類。 在證明它們令人困惑,麻煩和有缺陷之后,它們已被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天的情況下的計算結果。 如果你正在尋找增加一個月可以是302829天還那么也許你應該使用的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM