如何将两个String变量转换为date和timestamp列以插入到数据库中

时间:2016-04-29 08:17:02

标签: java date datetime

我需要你的帮助才能获得正确的格式来插入从数据库中的两个不同字符串变量中检索的日期和时间信息,并将它们(日期和时间)插入另一个表中的日期和时间列。从协议日期列中检索日期:

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),那么我该怎么办呢是什么?

5 个答案:

答案 0 :(得分:2)

您可以将这些字符串连接到datetime字符串并使用SimpleDateFormat转换为日期,例如

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
Date dateToInsert = format.parse(concatenatedDate);

答案 1 :(得分:0)

使用simpledateformat()的时间,你的时间是24小时吗?我们怎么知道它是AM还是PM?

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;

答案 2 :(得分:0)

我知道您从数据库中获取结果集中的值。通常日期和时间根据数据类型存储在数据库中。建议使用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 
        }
    }
    }

希望这有帮助!

答案 3 :(得分:0)

您可以使用JPA 2.1及其AttributeConverter界面

答案 4 :(得分:0)

java.time

其他答案使用遗留日期时间类,现在由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 );

您可以通过ZonedDateTime上的setObject方法将此PreparedStatement传递到您的数据库,并使用符合JDBC 4.2的驱动程序。但如果没有,请转换为旧的java.sql.Timestamp类型。那个旧类有一个方便转换的新方法,它采用Instant个对象。 Instant是UTC时间轴上的一个时刻,分辨率为纳秒。我们可以从Instant中提取ZonedDateTime

Instant instant = zdt.toInstant();
java.sql.Timestamp ts = java.sql.Timestamp.from( instant ); 

PreparedStatement上,拨打setTimestamp