程序包java.time不存在怎么解决?

Python018

程序包java.time不存在怎么解决?,第1张

jdk版本太低,java.time.LocalTime是java8新出的包。如果版本太低的话,比如jdk1.6,当然java.time不存在。换一个好版本的jdk!!\x0d\x0a\x0d\x0a为什么需要新的日期/日期API?\x0d\x0a在开始研究Java8日期/时间API之前,让我们先来看一下为什么我们需要这样一个新的API。在Java中,现有的与日期和时间相关的类存在诸多问题,其中有:\x0d\x0aJava的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。\x0d\x0ajava.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。\x0d\x0a对于时间、时间戳、格式化以及解析,并没有一些明确定义的类。对于格式化和解析的需求,我们有java.text.DateFormat抽象类,但通常情况下,SimpleDateFormat类被用于此类需求。\x0d\x0a所有的日期类都是可变的,因此他们都不是线程安全的,这是Java日期类最大的问题之一。\x0d\x0a日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。\x0d\x0a在现有的日期和日历类中定义的方法还存在一些其他的问题,但以上问题已经很清晰地表明:Java需要一个健壮的日期/时间类。这也是为什么JodaTime在Java日期/时间需求中扮演了高质量替换的重要角色。\x0d\x0aJava8日期/时间API\x0d\x0aJava8日期/时间API是JSR-310的实现,它的实现目标是克服旧的日期时间实现中所有的缺陷,新的日期/时间API的一些设计原则是:\x0d\x0a不变性:新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。\x0d\x0a关注点分离:新的API将人可读的日期时间和机器时间(unixtimestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unixtimestamp)以及时区定义了不同的类。\x0d\x0a清晰:在所有的类中,方法都被明确定义用以完成相同的行为。举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。为了更好的处理问题,所有的类都使用了工厂模式和策略模式,一旦你使用了其中某个类的方法,与其他类协同工作并不困难。\x0d\x0a实用操作:所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。\x0d\x0a可扩展性:新的日期/时间API是工作在ISO-8601日历系统上的,但我们也可以将其应用在非IOS的日历上。\x0d\x0a\x0d\x0a\x0d\x0aJava8日期/时间API包:\x0d\x0ajava.time包:这是新的Java日期/时间API的基础包,所有的主要基础类都是这个包的一部分,如:LocalDate,LocalTime,LocalDateTime,Instant,Period,Duration等等。所有这些类都是不可变的和线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求。\x0d\x0ajava.time.chrono包:这个包为非ISO的日历系统定义了一些泛化的API,我们可以扩展AbstractChronology类来创建自己的日历系统。\x0d\x0ajava.time.format包:这个包包含能够格式化和解析日期时间对象的类,在绝大多数情况下,我们不应该直接使用它们,因为java.time包中相应的类已经提供了格式化和解析的方法。\x0d\x0ajava.time.temporal包:这个包包含一些时态对象,我们可以用其找出关于日期/时间对象的某个特定日期或时间,比如说,可以找到某月的第一天或最后一天。你可以非常容易地认出这些方法,因为它们都具有“withXXX”的格式。\x0d\x0ajava.time.zone包:这个包包含支持不同时区以及相关规则的类。

import java.util.Calendar

public class Time {

private int hour

private int minute

private int second

Calendar c = Calendar.getInstance()

public Time(){

this.setPro()

}

public Time(long time){

c = Calendar.getInstance()

c.setTimeInMillis(time)

this.setPro()

}

public Time(int hour, int minute, int second){

c = Calendar.getInstance()

c.set(Calendar.HOUR, hour)

c.set(Calendar.MINUTE, minute)

c.set(Calendar.SECOND, second)

this.setPro()

}

public void setTime(long time){

c = Calendar.getInstance()

c.setTimeInMillis(time)

this.setPro()

}

private void setPro(){

hour = c.get(Calendar.HOUR)

minute = c.get(Calendar.MINUTE)

second = c.get(Calendar.SECOND)

}

public static void main(String[] args) {

Time t1 = new Time()

Time t2 = new Time(555550000)

System.out.println(t1.getHour()+":"+t1.getMinute()+":"+t1.getSecond())

System.out.println(t2.getHour()+":"+t2.getMinute()+":"+t2.getSecond())

}

public int getHour() {

return hour

}

public void setHour(int hour) {

this.hour = hour

}

public int getMinute() {

return minute

}

public void setMinute(int minute) {

this.minute = minute

}

public int getSecond() {

return second

}

public void setSecond(int second) {

this.second = second

}

}

以mysql为例,有个字段是timestamp或者datatime类型。

1、可以直接在java中直接new java.lang.util.Date()

2、获取到一个时间类型的字符串,然后利用SimpleDateFormat中的parse方法将时间字符串解析成一个Date对象。

现在比较流行的框架都是可以直接插入Date类型的数据,只要与数据库中的映射一致即可。

如mybatis,如下:

<resultMap id="BaseResultMap" type="com.test.User" >

<id column="id" property="id" jdbcType="INTEGER" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="insert_time" property="insertTime" jdbcType="TIMESTAMP" />

</resultMap>

只要User中的属性insertTime是一个标准格式的java.lang.util.Date类型,然后调用mybatis的insert方法即可插入。