![](/img/trans.png)
[英]Convert Joda Date Time String To Java.Sql.TimeStamp for an INSERT
[英]How to convert two String variables to date and timestamp column to insert into database
我需要您的幫助,以獲取正確的格式,以插入從數據庫中兩個不同的字符串變量中檢索到的日期和時間信息,並將它們(日期和時間)插入另一個表的“日期和時間”列中。 從協議日期列中檢索日期:
String agreement_date = "";
agreement_date=rs.getString("agr_date"); //format DD-MON-YYYY ex. 22-May-2014
從以下位置檢索時間:
String frm_time = rs.getString("FRM_TIME"); //format HH:MI ex.7:20
因此,現在我需要將兩列合並到一個變量中,並將其插入名為transaction_dt_time的數據庫列中,並且其類型為dateTime(格式dd / MM / YYYY HH:MI:SS AM / PM),那我該怎么做?
您可以將這些字符串連接為datetime字符串,並使用SimpleDateFormat轉換為日期,例如
SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
Date dateToInsert = format.parse(concatenatedDate);
請使用simpledateformat()作為時間,您的時間是24小時嗎? 我們怎么知道是上午還是下午?
SimpleDateFormat sdfTime = new SimpleDateFormat("HH:MI:SS"); //AM/PM?
String strTime = sdfTime.format(frm_time);
final_date = agreement_date.replaceAll("-","/");
String FinalDate = final_date + strTime;
我了解您正在從數據庫中獲取結果集中的值。 通常,日期和時間根據數據類型存儲在數據庫中。 建議使用rs.getDate()和rs.getTime()來獲取這些值,而不是String數據類型。
這是您進行轉換的示例代碼
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
try{
String date = "22-May-2015";
String time = "7:20";
String yourString = date+ " "+ time;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
Date parsedDate = dateFormat.parse(yourString);
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
System.out.println(timestamp);
}catch(Exception e){
e.printStackTrace();
//this generic but you can control another types of exception
// look the origin of excption
}
}
}
希望這可以幫助!
您可以使用JPA 2.1及其AttributeConverter接口
其他答案使用遺留日期時間類,現在這些類已由 Java 8及更高版本中內置的java.time框架取代。
首先,解析日期部分。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "mm-DD-yyyy" );
LocalDate localDate = LocalDate.parse( "22-May-2014" , dateFormatter );
其次,解析時間部分。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "h:m" );
LocalTime localTime = LocalTime.parse( "7:20" , dateFormatter );
第三,確定該值有意義的時區。 這是蒙特利爾時間,巴黎時間還是加爾各答時間?
ZoneId zoneId = ZoneId.of( "America/Montreal" );
合並為ZonedDateTime
。
ZonedDateTime zdt = ZonedDateTime.of( localDate , localTime , zoneId );
您可以使用與JDBC 4.2兼容的驅動程序,通過PreparedStatement
上的setObject
方法將此ZonedDateTime
傳遞給數據庫。 但是,如果不是,請轉換為舊的java.sql.Timestamp
類型。 那個舊類有一個方便轉換的新方法,該方法帶有一個Instant
對象。 Instant
是UTC時間線上的時刻,分辨率為納秒。 我們可以從ZonedDateTime
提取一個Instant
。
Instant instant = zdt.toInstant();
java.sql.Timestamp ts = java.sql.Timestamp.from( instant );
在您的PreparedStatement
,調用setTimestamp
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.