Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将joda LocalTime转换为sql时间_Java_Jodatime - Fatal编程技术网

Java 将joda LocalTime转换为sql时间

Java 将joda LocalTime转换为sql时间,java,jodatime,Java,Jodatime,我想将LocalTime对象转换为java.sql.Time对象 java.sql.Time time = new java.sql.Time(new LocalTime(1,0,0,0).getMillisOfDay()); System.out.println(time); //20:00:00 上面的代码不是创建值等于01:00:00的时间对象,而是创建时间为20:00:00的对象。当地时间是东部时间 我应该采取什么步骤 时间(..)接受从1970年开始的时间戳。所以你应该通过: < >

我想将LocalTime对象转换为java.sql.Time对象

java.sql.Time time = new java.sql.Time(new LocalTime(1,0,0,0).getMillisOfDay());
System.out.println(time); //20:00:00
上面的代码不是创建值等于01:00:00的时间对象,而是创建时间为20:00:00的对象。当地时间是东部时间

我应该采取什么步骤

时间(..)接受从1970年开始的时间戳。所以你应该通过:


< > >代码>新的时间(新的LoalTime:……totoTimeToDayAy)(GETMILISH)(< /代码> < /P> > P>我认为当前接受的答案是不正确的。尽管java.sql.Time意味着其日期字段设置为1970-1-1,但事实并非如此。如果您使用转换

new java.sql.Time(new LocalTime(...).toDateTimeToday().getMillis())
然后java.sql.Time对象的内部千秒表示将反映今天的日期。这导致在比较java.sql.Time对象时出现意外行为。 对毫秒值执行比较,如果基础日期不同,则时间字段与比较结果无关

更好的方法是使用java.sql.time中不推荐使用的构造函数和方法显式处理时间字段:

LocalTime localTime = new LocalTime(1,0,0,0);
java.sql.Time sqlTime = new java.sql.Time(localTime.getHourOfDay(), localTime.getMinuteOfHour(), localTime.getSecondOfMinute())
同样,在另一个方向

java.sql.Time sqlTime = new java.sql.Time(1,0,0);
LocalTime localTime = new LocalTime(sqlTime.getHours(), sqlTime.getMinues(), sqlTime.getSeconds());

这似乎是Joda Time API中的一个漏洞。现在
getLocalMillis()
受到
保护
,但这正是我想要使用的方法

但是,如果要避免使用不推荐的方法,可以计算1970年1月1日的时间:

LocalTime lt = new LocalTime(1, 23, 45, 678);
long millis = lt.toDateTimeToday().withDate(1970, 1, 1).getMillis()
java.sql.Time time = new java.sql.Time(millis);

这似乎奏效了。有趣的是,我试着通过乘以字段的值来计算毫秒数。这产生了正确的
long
值,但当我将其传递给
Time
构造函数时,时区发生了一些奇怪的事情。(我想至少是这样。
Time
值比我输入的值早了五个小时,我现在是东部夏时制,所以我想这就是发生的情况。)

我找到了另一种方法将java.Time.LocalTime转换为java.Time.LocalTime


使用不推荐的方法是不好的做法。当然是这样,但你必须知道什么时候打破规则。这些不推荐使用的方法是实现这一目标的最简单、最有效的方法,在可预见的将来,没有计划将它们从Java中删除。坦率地说,孙不应该反对他们;取而代之的是糟糕的混乱,这正是转向像JodaTime这样更干净的实现的全部原因。问题在于Joda Time中的LocalTime,而不是Java8中添加的LocalTime类。
LocalTime localTime = LocalTime.now();
Time time = Time.valueOf(localTime);