- 浏览: 7955019 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
本文是本人翻译作品,原文发表在:http://developer.51cto.com/art/201307/403828.htm
Java 8目前已经开始进入大众的视线,其中笔者在写本文之前,留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守JSR 310规范)。在本系列文章中,将对这些新的API进行举例说明。首先在本文中,将先介绍以下几个:Instant,LocalDate,LocalTime和LocalDateTime。
Java 8目前已经开始进入大众的视线,其中笔者在写本文之前,留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守JSR 310规范)。在本系列文章中,将对这些新的API进行举例说明。首先在本文中,将先介绍以下几个:Instant,LocalDate,LocalTime和LocalDateTime。
Instant (java.time.Instant)
可能最容易开始学习java.time包中的内容的就是先来看看Instant这个类。所谓的Instant类代表的是某个时间(有点象java.util.Date),它是精确到纳秒的(而不是象旧版本的Date精确到毫秒)。如果使用纳秒去表示一个时间则原来的使用一位Long类型是不足够的,需要占用更多一点的存储空间,然而实际上其内部是由两个Long字段组成,第一个部分保存的是自标准Java计算时代(就是1970年1月1日开始)到现在的秒数,第二部分保存的是纳秒数(永远不会超过999,999,999)。我们看下一个具体的例子:
//获得当前时间
//获得当前时间
Instant instant = Instant.now();
// 以ISO-8601输出
System.out.println(instant);
在Open JDK 中运行上面的代码,可以有如下格式的输出:2013-06-25T16:22:52.966Z,可以看到,输入了更为精确的日期。下面的例子是更多的关于Instant类的用法,如
//将java.util.Date转换为Instant
Instant instant = Instant.ofEpochMilli(new Date().getTime());
//从字符串类型中创建Instant类型的时间
instant = Instant.parse("1995-10-23T10:12:35Z");
注意,在上面的例子中,有一个字符串中创建Instant类型的时间,但Instant代表的是一个时间,并不包括时区的概念,所以必须传入的是符合UTC格式的字符串)。Instant API也提供了一些很有用的方法允许使用Instant和其他包中的类进行一些运算,下面是例子:
instant.plus(Duration.ofHours(5).plusMinutes(4));
上面表达的含义为,将现在的时间加上5个小时4分钟。
那么这个例子中,使用了多少个java.time.Instant实例呢?答案是两个。Java.time这个包是线程安全的并且和其他大部分类一样是不可变类。Instant也遵守这个规则,因此plus方法产生一个新的实例,如:
Instant instant1 = instant.plus(Duration.ofHours(5).plusMinutes(4));
System.out.println("Instant is immutable, so instant==instant returns: " + (instant == instant1));
输出为:
Instant is immutable, so instant==instant returns: false
下面是更多关于计算的例子:
// Substract 5 days of an instant 计算5天前
instant.minus(5, ChronoUnit.DAYS); // Option 1 方法1
instant.minus(Duration.ofDays(5)); // Option 2 方法2
//计算两个Instant之间的分钟数
long diffAsMinutes = instant.periodUntil(instant1, ChronoUnit.MINUTES); // 方法1
long diffAsMinutes = ChronoUnit.MINUTES.between(instant, instant1); // 方法2
Instant是可比较的,这意味着可以对两个Instant进行比较。它提供了isAfter()和isBefore()两个方法进行比较,如下代码所示:
//用compareTo方法比较
System.out.format("instant1.compareTo(instant)=%d.%n", instant1.compareTo(instant));
// 使用isAfter()和isBefore()
System.out.format("instant1.isAfter(instant)=%b, instant1.isBefore(instant)=%b.%n",
instant1.isAfter(instant), instant1.isBefore(instant))
输出结果:
instant1.compareTo(instant)=1.
instant1.isAfter(instant)=true, instant1.isBefore(instant)=false
Localdate和LocalTime
LocalDate表示不带时区的日期,比如1-1-2000。LocalTime表示不带时区的时间,比如04:44:50.12,和之前提到的Instant类是从1970年计算偏移量不同,这两个类的输出是人们习惯阅读的日期和时间。有很多种方法去获得LocalTime和LocalDate的实例,如
LocalDate localDate = LocalDate.now();
localDate = LocalDate.ofYearDay(2005, 86); // 获得2005年的第86天 (27-Mar-2005)
localDate = LocalDate.of(2013, Month.AUGUST, 10); //2013年8月10日
LocalTime localTime = LocalTime.of(22, 33); //10:33 PM
localTime = LocalTime.now();
localTime = LocalTime.ofSecondOfDay(4503); // 返回一天中的第4503秒 (1:15:30 AM)
LocalDate和LocalTime和Instant一样遵守同样的线程规定―― 如它们的实例子都是不可变的。LocalDate和LocalTime和Instant有同样的计算和比较方法(其中有些方法是在java.time.temporal.Temporal接口中定义的,并且上面这些类都实现了这些方法):
LocalDate localDate1 = localDate.plus(5, ChronoUnit.HOURS);
localDate.isBefore(localDate1);
LocalDateTime
最后来看下在简单日期和时间类中最重要的一个:LocalDataTeime。它是LocalDate和LocalTime的组合体,表示的是不带时区的日期及时间。看上去,LocalDateTime和Instant很象,但记得的是“Instant中是不带时区的即时时间点。可能有人说,即时的时间点不就是日期+时间么?看上去是这样的,但还是有所区别,比如LocalDateTime对于用户来说,可能就只是一个简单的日期和时间的概念,考虑如下的例子:两个人都在2013年7月2日11点出生,第一个人是在英国出生,而第二个是在加尼福利亚,如果我们问他们是在什么时候出生的话,则他们看上去都是在同样的时间出生(就是LocalDateTime所表达的),但如果我们根据时间线(如格林威治时间线)去仔细考察,则会发现在出生的人会比在英国出生的人稍微晚几个小时(这就是Instant所表达的概念,并且要将其转换为UTC格式的时间)。除此之外,LocalDateTime的用法和上述介绍的其他类都很相似,如下例子所示:
LocalDateTime localDateTime = LocalDateTime.now();
//当前时间加上25小时3分钟
LocalDateTime inTheFuture = localDateTime.plusHours(25).plusMinutes(3);
// 同样也可以用在localTime和localDate中
System.out.println(localDateTime.toLocalTime().plusHours(25).plusMinutes(3));
System.out.println(localDateTime.toLocalDate().plusMonths(2));
// 也可以使用实现TemportalAmount接口的Duration类和Period类
System.out.println(localDateTime.toLocalTime().plus(Duration.ofHours(25).plusMinutes(3)));
System.out.println(localDateTime.toLocalDate().plus(Period.ofMonths(2)));
Java 8目前已经开始进入大众的视线,其中笔者在写本文之前,留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守JSR 310规范)。在本系列文章中,将对这些新的API进行举例说明。首先在本文中,将先介绍以下几个:Instant,LocalDate,LocalTime和LocalDateTime。
Java 8目前已经开始进入大众的视线,其中笔者在写本文之前,留意到其中Java 8预览版中将会出现新的关于日期和时间的API(遵守JSR 310规范)。在本系列文章中,将对这些新的API进行举例说明。首先在本文中,将先介绍以下几个:Instant,LocalDate,LocalTime和LocalDateTime。
Instant (java.time.Instant)
可能最容易开始学习java.time包中的内容的就是先来看看Instant这个类。所谓的Instant类代表的是某个时间(有点象java.util.Date),它是精确到纳秒的(而不是象旧版本的Date精确到毫秒)。如果使用纳秒去表示一个时间则原来的使用一位Long类型是不足够的,需要占用更多一点的存储空间,然而实际上其内部是由两个Long字段组成,第一个部分保存的是自标准Java计算时代(就是1970年1月1日开始)到现在的秒数,第二部分保存的是纳秒数(永远不会超过999,999,999)。我们看下一个具体的例子:
//获得当前时间
//获得当前时间
Instant instant = Instant.now();
// 以ISO-8601输出
System.out.println(instant);
在Open JDK 中运行上面的代码,可以有如下格式的输出:2013-06-25T16:22:52.966Z,可以看到,输入了更为精确的日期。下面的例子是更多的关于Instant类的用法,如
//将java.util.Date转换为Instant
Instant instant = Instant.ofEpochMilli(new Date().getTime());
//从字符串类型中创建Instant类型的时间
instant = Instant.parse("1995-10-23T10:12:35Z");
注意,在上面的例子中,有一个字符串中创建Instant类型的时间,但Instant代表的是一个时间,并不包括时区的概念,所以必须传入的是符合UTC格式的字符串)。Instant API也提供了一些很有用的方法允许使用Instant和其他包中的类进行一些运算,下面是例子:
instant.plus(Duration.ofHours(5).plusMinutes(4));
上面表达的含义为,将现在的时间加上5个小时4分钟。
那么这个例子中,使用了多少个java.time.Instant实例呢?答案是两个。Java.time这个包是线程安全的并且和其他大部分类一样是不可变类。Instant也遵守这个规则,因此plus方法产生一个新的实例,如:
Instant instant1 = instant.plus(Duration.ofHours(5).plusMinutes(4));
System.out.println("Instant is immutable, so instant==instant returns: " + (instant == instant1));
输出为:
Instant is immutable, so instant==instant returns: false
下面是更多关于计算的例子:
// Substract 5 days of an instant 计算5天前
instant.minus(5, ChronoUnit.DAYS); // Option 1 方法1
instant.minus(Duration.ofDays(5)); // Option 2 方法2
//计算两个Instant之间的分钟数
long diffAsMinutes = instant.periodUntil(instant1, ChronoUnit.MINUTES); // 方法1
long diffAsMinutes = ChronoUnit.MINUTES.between(instant, instant1); // 方法2
Instant是可比较的,这意味着可以对两个Instant进行比较。它提供了isAfter()和isBefore()两个方法进行比较,如下代码所示:
//用compareTo方法比较
System.out.format("instant1.compareTo(instant)=%d.%n", instant1.compareTo(instant));
// 使用isAfter()和isBefore()
System.out.format("instant1.isAfter(instant)=%b, instant1.isBefore(instant)=%b.%n",
instant1.isAfter(instant), instant1.isBefore(instant))
输出结果:
instant1.compareTo(instant)=1.
instant1.isAfter(instant)=true, instant1.isBefore(instant)=false
Localdate和LocalTime
LocalDate表示不带时区的日期,比如1-1-2000。LocalTime表示不带时区的时间,比如04:44:50.12,和之前提到的Instant类是从1970年计算偏移量不同,这两个类的输出是人们习惯阅读的日期和时间。有很多种方法去获得LocalTime和LocalDate的实例,如
LocalDate localDate = LocalDate.now();
localDate = LocalDate.ofYearDay(2005, 86); // 获得2005年的第86天 (27-Mar-2005)
localDate = LocalDate.of(2013, Month.AUGUST, 10); //2013年8月10日
LocalTime localTime = LocalTime.of(22, 33); //10:33 PM
localTime = LocalTime.now();
localTime = LocalTime.ofSecondOfDay(4503); // 返回一天中的第4503秒 (1:15:30 AM)
LocalDate和LocalTime和Instant一样遵守同样的线程规定―― 如它们的实例子都是不可变的。LocalDate和LocalTime和Instant有同样的计算和比较方法(其中有些方法是在java.time.temporal.Temporal接口中定义的,并且上面这些类都实现了这些方法):
LocalDate localDate1 = localDate.plus(5, ChronoUnit.HOURS);
localDate.isBefore(localDate1);
LocalDateTime
最后来看下在简单日期和时间类中最重要的一个:LocalDataTeime。它是LocalDate和LocalTime的组合体,表示的是不带时区的日期及时间。看上去,LocalDateTime和Instant很象,但记得的是“Instant中是不带时区的即时时间点。可能有人说,即时的时间点不就是日期+时间么?看上去是这样的,但还是有所区别,比如LocalDateTime对于用户来说,可能就只是一个简单的日期和时间的概念,考虑如下的例子:两个人都在2013年7月2日11点出生,第一个人是在英国出生,而第二个是在加尼福利亚,如果我们问他们是在什么时候出生的话,则他们看上去都是在同样的时间出生(就是LocalDateTime所表达的),但如果我们根据时间线(如格林威治时间线)去仔细考察,则会发现在出生的人会比在英国出生的人稍微晚几个小时(这就是Instant所表达的概念,并且要将其转换为UTC格式的时间)。除此之外,LocalDateTime的用法和上述介绍的其他类都很相似,如下例子所示:
LocalDateTime localDateTime = LocalDateTime.now();
//当前时间加上25小时3分钟
LocalDateTime inTheFuture = localDateTime.plusHours(25).plusMinutes(3);
// 同样也可以用在localTime和localDate中
System.out.println(localDateTime.toLocalTime().plusHours(25).plusMinutes(3));
System.out.println(localDateTime.toLocalDate().plusMonths(2));
// 也可以使用实现TemportalAmount接口的Duration类和Period类
System.out.println(localDateTime.toLocalTime().plus(Duration.ofHours(25).plusMinutes(3)));
System.out.println(localDateTime.toLocalDate().plus(Period.ofMonths(2)));
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1594方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2024前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3479info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2244import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 499https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 697public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 624https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 676https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 444https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5531 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3113微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 626https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1849什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 973本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1379原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 870public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 679在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 946-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 777一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1915介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
这份资料"基于计算机软件开发的JAVA编程应用初探"将引领我们深入理解Java在软件开发中的核心概念、应用领域以及实战技巧。 首先,Java的基础知识是学习的重点。Java是一种强类型、静态类型的编程语言,它的语法与...
总的来说,"基于游戏开发的Java语言教学初探"这个主题涵盖了从基础语法到高级应用的多个层面,旨在通过实践性的游戏项目,使学生在愉快的氛围中掌握Java编程技能,并了解游戏开发的全貌。通过阅读提供的"基于游戏...
还会介绍Java 8引入的Lambda表达式和Stream API在并发编程中的应用。 6. **其他可能章节** 压缩包可能还涵盖了异常处理、类和对象、继承、接口、抽象类、访问修饰符、封装、构造器、集合框架(List、Set、Map)、...
Java NIO 网络编程初探 1. Java NIO Java 1.4 版本添加了一个新的IO API,称为NIO(New IO)。NIO拥有所有IO的功能,但是操作方法却完全不一样。NIO支持面向缓冲区的、基于通道的IO操作。能够更加高效的进行IO操作。...
* 架构变化:v2 版本需要部署一个 Tiller,Helm 作为客户端,首先需要连接 Tiller,由 Tiller 作为转发连接到 apiserver,而且必须对 Tiller 授权访问 Kubernetes 资源。v3 版本去掉了 Tiller,Helm 作为客户端,...
在Java编程环境中,有许多开源GIS库可供开发者使用,这使得Java成为GIS开发的一个强大平台。本教程将探讨如何利用Java进行开源GIS编程,以实现地理数据的处理和应用开发。 一、Java GIS框架 1. GeoTools:GeoTools...
第8章 Java中的包(Package)命名习惯和注释 193 教学视频:43分钟 8.1 Java中的包(Package) 193 8.1.1 Java中的包 193 8.1.2 在Eclipse中使用包 194 8.1.3 天上掉下个package 197 8.1.4 包带来了什么? 197...
通过阅读《Netty初探:掌握高性能网络通信框架,提升Java网络编程技能》这本书,你将深入了解这些概念,并学会如何运用Netty构建实际的网络应用,提升你的Java编程技能。这本书会逐步引导你从基础知识到高级特性的...
第8章 Java中的包(Package)命名习惯和注释 193 教学视频:43分钟 8.1 Java中的包(Package) 193 8.1.1 Java中的包 193 8.1.2 在Eclipse中使用包 194 8.1.3 天上掉下个package 197 8.1.4 包带来了什么? 197...
【Java Web项目初探:高校马拉松】 在信息技术领域,Java Web技术是开发互联网应用程序的主流之一,尤其在教育环境中,如“高校马拉松”这样的项目,它通常被用来培养学生的编程能力和团队协作精神。Java Web项目...
在Java企业级应用开发中,Enterprise JavaBeans (EJB) 和Java Persistence API (JPA) 是两个至关重要的组件。EJB是Java EE平台的一部分,提供了一种规范来创建分布式、事务处理、安全性和可管理的企业级服务。而JPA...
【Java网上商城系统初探】 Java网上商城是一个基于Java技术构建的电子商务平台,它提供了商品浏览、购物车、订单处理、支付接口等核心功能。在本文中,我们将深入探讨Java网上商城的一些关键技术点和实现原理。 一...
在博文《初探ASM》中,作者可能详细介绍了如何使用ASM的基本概念和API。通常,这会包括以下几个步骤: 1. **创建类装载器**:ASM使用自定义类装载器来读取和解析.class文件,或者直接生成字节码。 2. **访问框架**...
在Java环境中,开发SIP应用主要依赖于JSR 289规范定义的Java SIP API。这个API为开发者提供了一套完整的工具集,用于构建SIP服务器、代理服务器以及客户端应用程序。Java SIP API包括了SIP消息的创建、发送和接收,...
Java Database Connectivity(JDBC)是Java平台中用于与关系数据库进行交互的API。在处理数据库操作时,事务管理是至关重要的一个环节,它确保了数据的一致性和完整性。本篇文章将深入探讨JDBC中的事务概念及其使用...
### Java编程语言初探 #### 一、Java编程语言简介 Java是一种广泛使用的高级编程语言,以其跨平台性、易学性和广泛的就业前景而著称。它最初由Sun Microsystems(后被Oracle收购)的詹姆斯·高斯林(James Gosling...