平心在线官网:Java日期和时间

admin 2个月前 (07-13) 科技 42 1

观点

时区

  差别时区在统一时刻,它们的内陆时间是差别的,全球一共有24个时区,我们把伦敦所在的时区称为尺度时区,其他时区根据器械偏移的小时来区分,北京所在的时区是东八区(GMT+08:00)。
时区的表现方式如下:

  • GMT+08:00
  • UTC+08:00
  • CST(China Standard Time / Central Standard Time USA)
  • Asia/Shanghai

区域

Local 示意一个国家或区域的日期、时间、数字、钱币等花样

  • zh_CN: 示意的是中国的Local,日期用年月日示意2020-07-05
  • en_US: 示意的是美国的Local,日期用日月年示意05/07/2020

盘算机用Local在日期、时间、钱币和字符串之间举行转换

   中国用户 美国用户
购置价钱: 12000.0 12,000.00
购置日期: 2020-07-05 05/07/2020

java.time的API

java.time提供了新的日期和时间API

  • LocalDate/LocalTime/LocalDateTime
  • ZonedDateTime/ZoneId
  • Instant
  • Formatter
  • ...

新API的特点:

  • 严酷区分日期、时间
  • 稳定类(类似String)
  • Month局限1~12(Jan~Dec)
  • Week局限1~7(Mon~Sun)

LocalDateTime

        LocalDate d = LocalDate.now(); // 当前日期
        LocalTime t = LocalTime.now(); //当前时间
        LocalDateTime dt = LocalDateTime.now(); // 当前日期时间
        System.out.println(dt); // 严酷根据ISO 8601花样打印 2020-07-05T16:38:37.356

        //指定日期和时间
        LocalDate d2 = LocalDate.of(2020, 7, 5); // 2020-07-05,注重 7=7月
        LocalTime t2 = LocalTime.of(16, 38, 37); // 16:38:37
        LocalDateTime dt2 = LocalDateTime.of(2020, 7, 5,16, 38, 37); // 2020-07-05T16:38:37
        LocalDateTime dt3 = LocalDateTime.of(d2, t2); // 2020-07-05T16:38:37

        //对日期举行花样化a
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(dtf.format(LocalDateTime.now())); // 2020-07-05 16:45:08

        //将字符串剖析成日期
        LocalDateTime parse = LocalDateTime.parse("2020-07-05 16:45:08", dtf);
        System.out.println(parse); // 2020-07-05T16:45:08

新的DateTimeFormatter是不可变的。默认情况下,LocalDate,LocalTime,LocalDateTime根据ISO尺度花样化和剖析:

  • yyyy-MM-dd
  • HH:mm:ss
  • HH:mm:ss:SSS
  • yyyy-MM-dd'T'HH:mm:ss
  • yyyy-MM-dd'T'HH:mm:ss:SSS

重大更新:对日期和时间举行加减

  • plusDays() 在现在的日期加上详细天数
  • minusHous() 在现在的时间减去详细的小时
  • plusWeeks() 在现在的日期时间加上详细的周数
        // +5 天
        LocalDate today = LocalDate.now();
        LocalDate after5Days = today.plusDays(5);
        System.out.println(after5Days); //2020-07-10

        // -2小时
        LocalTime now = LocalTime.now();
        LocalTime before2Hours = now.minusHours(2);
        System.out.println(before2Hours); // 14:59:22.526

        // +1月-2周
        LocalDate date = today.plusMonths(1).minusWeeks(2);
        System.out.println(date); // 2020-07-22

对日期和时间举行调整:

  • withDayOfMonth()
  • withMonth()
  • withHour()
  • ...
  • with()
        //本月第一天
        LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
        System.out.println(firstDay); // 2020-07-01
        //把秒和纳秒调整为0
        LocalTime at = LocalTime.now().withSecond(0).withNano(0);
        System.out.println(at); // 17:08

        //本月最后一天
        LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
        System.out.println(lastDay); // 2020-07-31
        //本月第一个周日
        LocalDate firstSunday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));
        System.out.println(firstSunday); //2020-07-05

判断日期和时间的先后:

  • isBefore()
  • isAfter()
  • equals()
        LocalDate d01 = LocalDate.of(2020,7,5);
        LocalDate d02 = LocalDate.of(2020,7,4);
        System.out.println(d01.isBefore(d02)); // false
        System.out.println(d01.isAfter(d02)); // true

盘算日期的Period: 某一天到指定的某一天详细相差多久

  • getYears()
  • getMonths()
  • getDays()
        LocalDate d03 = LocalDate.of(2020,7,5);
        LocalDate d04 = LocalDate.of(2018,3,28);
        //通过until()方式获取Period工具,判断两个日期相差?年?月?天
        Period period = d03.until(d04);
        System.out.println(period); // P-2Y-3M-8D 示意2020年7月5日到2018年3月28日中相差 2年3个月8天
        //两个日期一共相差若干天?
        long day01 = LocalDate.of(2020, 7, 5).toEpochDay();
        long day02 = LocalDate.of(2018,3,28).toEpochDay();
        System.out.println(day01-day02); // 830 

LocalDateTime无法与long举行转换

  • 由于LocalDateTime 没有时区,无法确定某一时刻
  • ZonedDateTime 有时区,可以与long举行转换

ZonedDateTime

ZonedDateTime = LocalDateTime + ZoneId

  • ZonedDateTime: 带时区的日期和时间
  • ZoneId: 新的时区工具(取代旧的java.util.TimeZone)
  • Instant: 时刻工具(epoch seconds)
        ZonedDateTime zbj = ZonedDateTime.now(); // 当前时区的日期和时间
        System.out.println(zbj); // 2020-07-05T17:32:40.415+08:00[Asia/Shanghai]

        ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 纽约时区的当前日期和时间
        System.out.println(zny); // 2020-07-05T05:34:29.522-04:00[America/New_York]

ZonedDateTime可以从LocalDateTime转换: atZone()

        //关联到当前默认时区
        ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());
        System.out.println(bj); // 2020-07-05T17:36:12+08:00[Asia/Shanghai]

        //关联到纽约时区
        ZonedDateTime ny = ldt.atZone(ZoneId.of("America/New_York"));
        System.out.println(ny); // 2020-07-05T17:36:12-04:00[America/New_York]

转换时区:withZoneSamleInstant()

        LocalDateTime ldt = LocalDateTime.of(2020, 7, 5, 17, 36, 12);

        //关联到当前默认时区
        ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());
        System.out.println(bj); // 2020-07-05T17:36:12+08:00[Asia/Shanghai]

        // 转换到纽约时区
        ZonedDateTime zdt = bj.withZoneSameInstant(ZoneId.of("America/New_York"));
        System.out.println(zdt); // 2020-07-05T17:36:12-04:00[America/New_York]

Instant工具示意时刻:

  • ZonedDateTime.toInstant()
  • Instant.getEpochSecond()
        Instant ins = Instant.now();
        Instant ins2 = ZonedDateTime.now().toInstant();
        ZonedDateTime zdt = ins.atZone(ZoneId.of("Z"));
        //注重是秒
        long epoch = ins.getEpochSecond();

  若是项目中需要使用generatorConfig.xml设置文件天生java8中的日期类型LocalDate、LocalTime、LocalDateTime等等,需要在设置文件中的javaTypeResolver结点中加入属性useJSR310Types,当useJSR310Types为true时,就会jdbc对应的日期类型会转成java8中的LocateDateTime类型,若是useJSR310Types为false,则照样转成java.util.Date类型。

        <javaTypeResolver>
            <property name="useJSR310Types" value="true"/>
        </javaTypeResolver>

  一旦mybatis中使用了java8中的日期类型,记得要在项目中引入mybatis-typehandlers-jsr310,这个主要是处置java8中的日期类型。

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-typehandlers-jsr310</artifactId>
    <version>1.0.2</version>
</dependency>

注重:用maven mybatis插件若是不在plugin内里添加依赖包的引用的话,会找不到相关得jar包,在plugin外部得jar包,他不会去找到并执行,以是要把plugin运行依赖得jar设置都放在内里,pom.xml设置 mybatis插件如下:

<plugins>
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.13</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>

注重,在毗邻mysql8.0的时刻要指明timeZone,即serverTimezone=UTC这个不能忘

,

欧博客户端

欢迎进入欧博客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:平心在线官网:Java日期和时间

网友评论

  • (*)

最新评论

  • UG环球官方网 2020-07-13 00:13:59 回复

    环球UG欢迎进入环球UG官网(UG环球):www.ugbet.us,环球UG官方网站:www.ugbet.net开放环球UG网址访问、环球UG会员注册、环球UG代理申请、环球UG电脑客户端、环球UG手机版下载等业务。不落俗套

    1

站点信息

  • 文章总数:533
  • 页面总数:0
  • 分类总数:8
  • 标签总数:922
  • 评论总数:163
  • 浏览总数:9384