java.sql.Date并为java.sql.Time到org.joda.time.DateTime

问题描述:

由于问题的标题说,java.sql.Date并为java.sql.Time到org.joda.time.DateTime

我有java.sql.Datejava.sql.Time输入

现在我想将它们转换为一个DateTime对象,但由于getDay,getYear等方法被弃用,我无法弄清楚如何将两者结合起来...

+0

你能从sql数据类型中得到一个'long',并用它来构造一个joda DateTime吗? – vikingsteve 2013-03-08 09:49:29

+0

我可以从两者中得到很长一段时间,但将它们加在一起并不能完成这项工作...... – Luc 2013-03-08 09:58:13

+0

添加这些类型的想法是什么?它们代表了自*以来的一段时间。 – 2013-03-08 10:02:37

只是看看这是否适合你。

Date date = new Date(System.currentTimeMillis()); // Prints 2013-03-08 
Time time = new Time(System.currentTimeMillis()); // Prints 15:40:33 

String myDate = date + " " + time; 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
java.util.Date utilDate = new java.util.Date(); 
try { 
    utilDate = sdf.parse(myDate); // You get a Java Util Date object(Fri Mar 08 15:40:33 IST 2013) 
} catch (ParseException pe) { 
    // TODO something. 
} 

DateTime dateTime = new DateTime(utilDate); // You get your JODA object. 
+0

你好,我很感谢你! – Luc 2013-03-08 10:24:34

+1

使用格式化来构造日期效率低下,并忽略joda时间丰富的API。为什么不简单地将LocalDate和LocalTime合并到DateTime中? – bowmore 2013-03-08 20:42:30

只需在java.sql.Time上做一些技巧:计算持续时间。 java.sql.Time隐式地将日期组件设置为1970年1月1日。

java.sql.Date epoch = new Date(70, 0, 1); 
    java.sql.Date date = new Date(113, 2, 8); 
    java.sql.Time time = new Time(1, 1, 1); 
    DateTime dt = new DateTime(date.getTime()) 
      .plus(time.getTime() - epoch.getTime()); 
    System.out.println(date); 
    System.out.println(time); 
    System.out.println(dt); 

您可以创建之日起,DateTime对象,并添加一个Duration对象到DateTime对象,导致单个对象whcih是由你的输入表示的时间日期+时间瞬间。

类似以下内容:

Date d = //your Date 
Time t = //your time 

DateTime result = new DateTime(d).plus(t.getTime()); 

这将导致表示要即时不可变对象.... II正确理解你的问题,你以后有什么是“增加”两个办法代表时间的不同班级。