Java SE 8新功能介绍:使用新的DateTime API计算时间跨度

使用Java SE 8新的DateTime API JSR 310…可以实现更清晰,可读且功能强大的编码。

Java日期和时间JavaSE8-500-300

Java SE 8,JSR 310

在上一篇文章“ 使用Streams API处理集合 ”中; 我已深入探讨和探索如何使用遍历集合,如何从集合和数组创建流以及最终汇总流值。在“ Java SE 8新功能导览”系列的这篇文章中,我们将深入探讨解释,并探索JSR 310规范的代码,包括如何使用新的DateTime API计算时间跨度,如何使用Instant和Duration来计算时间跨度,表示日期和时间值,格式化日期和时间值以及支持时区偏移量。

源代码托管在我的Github帐户上:从此处克隆它。

表中的内容:

  1. 使用“即时”和“持续时间”计算时间跨度。
  2. 代表日期和时间值。
  3. 格式化日期和时间值。
  4. 支持时区偏移。

1-用即时和持续时间计算时间跨度:

介绍:
Java SE 8包括一个用于管理日期和时间值的全新API。 在此新API中实际保存数据的类都是不可变的,并且是线程安全的 。 因此,这意味着您不必担心在多线程环境中传递对象。 而且,如果您在并行流中使用它们,那么一切都将始终正常运行。 这个新API中的所有类都是包java.time成员。 我将从命名为InstantDuration两个核心类开始。

怎么运行的:
我将从eg.com.tm.java8.features.datetime.InstDuration项目的Java8Features包中的示例开始。 在名为InstantAndDuration的类代码中。 然后将所有这些代码放入main方法中。 我将描述的第一堂课称为Instant 。 我将输入类的名称,然后按Ctrl + Space ,然后从java.time包中选择该类,并将其导入上方。 即时对象表示Java时间轴上的即时。 就像日期类是管理日期和时间的旧方法的一部分一样,实例代表了毫秒数。

从1970年1月1日Java时代开始。要声明一个即时对象,我将使用其类型对其进行声明,并将其命名为start。 然后,我将调用即时类的静态方法now() 。 这代表了当前机​​器上调用代码的时刻。 然后,我将使用标准系统输出将该值作为字符串输出。 运行代码,您将看到输出开始于以年,月,日期格式的日期,然后是字母T之后的时间。

结果:

2016-08-05T21:21:59.601Z

一旦有时间,您可以使用它来计算该时间与另一个时间之间的差异。 因此,我将创建另一个瞬间,称为结束。 我也会从now()方法中获得它的价值。 然后,我将使用系统输出,并输出该值。 请注意,两个值之间存在细微差别,这就是我的系统所花费的时间。 要处理这一行代码,即输出起始值。

结果:

2016-08-05T21:33:55.971Z
2016-08-05T21:33:56.048Z

如果我要将那行代码向下移动,那么在两次调用now方法之间没有进行任何其他处理,则这两个值将是相同的,或者可能相差千分之一秒。

结果:

2016-08-05T21:34:43.365Z
2016-08-05T21:34:43.365Z

现在,我将向您展示如何计算这两个值之间的差。 当您将两个瞬间相互比较时,您会得到一个称为持续时间的对象。 它由Duration类表示,该类也是Java.time的成员。 我将这个对象命名为过去。 我将调用持续时间类的静态方法, between(Temporal startInclusive, Temporal endExclusive)称为between(Temporal startInclusive, Temporal endExclusive) 。 注意,它正在寻找类型为Temporal对象。 Instant类是Temporal的子类。

结果:

Elapsed: PT0S

我将以两个时间值作为起点和终点。 然后我将输出差异。 我将传递过去的文字标签,然后传递变量。 该持续时间对象以字母p开头,然后以t开头。 这也是ISO格式的值。 然后它告诉我零秒。 好吧,让我们看看如果我们调用sleep方法会发生什么。 我将光标放在开始和结束调用之间。 我将使用Thread类。

我将按点号,然后按Ctrl + Space 。 然后,我将调用sleep()方法并传递一个1,000的值。 意思是睡一秒钟。 sleep方法可能会引发错误,因此我将使用快速修复方法,并在主方法签名中添加throws声明。 我将保存并运行代码,现在我的经过时间为1.001秒。 您永远无法真正指望确切的事情,这完全取决于正在处理的计算机上发生的事情。

结果:

Elapsed: PT1.001S

接下来,我将进行此打印线调用,并将其移回其原始位置。 因此,现在在获得起始值之后,我将执行打印线命令。 我要睡一秒钟。 我将运行代码。 现在我的经过时间为1.057秒。

结果:

2016-08-05T22:28:42.685Z
2016-08-05T22:28:43.769Z
Elapsed: PT1.084S

为了使它更具可读性,我将使用elapsed.to millis向duration对象的方法添加一个调用。 也就是说,获得毫秒数等效值。 我将以毫秒为单位追加代码,然后运行代码。

结果:

2016-08-05T22:32:52.657Z
2016-08-05T22:32:53.731Z
Elapsed: 1074 milliseconds

结论:
现在,我看到的可读值为1,054毫秒。 因此,这就是Instant类和Duration类。 Java SE 8中的两个核心类,新的日期时间API。

2-表示日期和时间值:

介绍:
之前,我描述了如何在新的日期时间API中使用Instant类来表示Java时间轴中的时刻。 这是另外三个有用的类,分别代表日期和时间的一部分。 它们称为本地日期本地时间本地日期时间 。 例如,假设您只想表示一个日期值。 并且您不在乎时间,秒或毫秒,而只关心当前日期。 创建一个名为LocalDate的类的实例。
运作方式 我正在使用eg.com.tm.java8.features.datetime.localdt项目的Java8Features包。 在名为LocalDateAndTime的类代码中。 主要方法 我将从类LocalDate的名称开始。 当我按Ctrl + Space时 ,我将从java.time包中选择类。 我将对象命名为currentDate并通过localDate.now获得其值。 请注意,在处理即时,日期,时间和日期时间之间,语法上存在一致性。

要在当前计算机上获取当前值,请始终使用now方法。 现在,我将以默认格式输出该日期。 我将保存并运行代码,并以年-月-日格式显示日期

结果:

2016-08-06

您还可以使用特定的年份,月份和日期值创建日期对象。 再一次,我将创建一个类型为LocalDate的对象。 我将其命名为一个specificDate 。 要获取此值,请调用LocalDate.of

并且有几个可用的版本。 我将使用带有三个整数值的那个。 它们没有在文档中命名,但是它们代表年,月和日。 我将修补2,000、1和1的值。现在,在较早版本的date time API中,使用date类。 当您处理几个月时,您总是必须将偏移量设置为0。 因此,对于一月,您将使用0,对于二月1,等等。

这并不是特别直观。 在新的日间时间API中,所有内容均基于1。 因此1表示一月 ,2表示二月 ,依此类推。 就像您通常期望的那样。

我将再次使用系统输出,这次,我将放置新的特定日期。 保存并运行后,我得到的价值是2000年1月1日输入的。

结果:

2016-01-01

如果您只想表示一个时间值,请使用LocalTime类,我将键入该类的名称并将其导入,将其命名为currentTime对象,然后从LocalTime.now获取其值。

同样,使用与localdate和Instant相同的语法。 然后,我将使用系统输出。 我将输出当前时间。 时间的默认值是24小时表示法,它显示小时,分钟,秒和毫秒。

结果:

01:18:11.779

我将使用LocalTime 。 我将其命名为specificTime 。 而且,同样与当地的日期类,我会打电话叫方法of 。 同样,有许多不同的版本采用不同数量的参数。

我将使用寻找三个整数值的版本,并输入14、0和45。然后,将该值输出到控制台。 结果就来了。 14、00和45秒。 请注意,由于我没有提供毫秒值,因此该时间的格式化版本在点后不显示值。

结果:

14:00:45

最后,我将展示如何使用LocalDateTime类。

我将输入类的名称并将其导入。 我将此对象命名为currentDT 。 我将从LocalDateTime.now获得它的值。 输出日期时间值时,将获得长格式的ISO日期时间。 从日期开始,到时间结束。 并且如果值中包含毫秒,则将显示它们。 最后,我将创建一个特定的日期和时间,并将其与特定的日期和时间结合起来。

该代码将类似于下一个代码。 我将创建一个LocalDateTime对象。 我将其命名为specificDT然后再次调用LocalDateTime.of 。 这次,我将使用该方法的第一个版本,该版本接受本地日期对象和本地时间对象。 您还可以根据年份,月份,日期和时间值的组合来构造日期时间值。 我将输入具体的日期和时间。 然后将其输出到控制台。 当我运行该代码时,我的特定日期时间是我的特定日期和时间的组合。

结果:

2016-08-06T01:30:46.625
2016-01-01T14:00:45

结论:
因此,可以使用这三个类来表示当前时区中本地计算机上的日期和时间值。 您还可以使用一些类来获取时区敏感值。 接下来我将描述这些。

3-格式化日期和时间值:

介绍:
前面已经描述了如何使用LocalDateLocalTimeLocalDateTime类表示时间值。 要将这些信息呈现给用户,您需要对其进行格式化。 为此,有一个名为DateTimeFormatter的新类。 我将向您展示如何使用一些简单的语法创建格式化程序。 然后如何使用称为Daytime Formatter Builder的类完成非常自定义的工作。

怎么运行的:
我正在使用eg.com.tm.java8.features.datetime.format项目的Java8Features 。 在名为DateTimeFormater的类代码中。 主要方法

首先,我将创建一个日期。 我给它一种LocalDate ,确保导入该类。 我将其命名为currentDate 。 我将从LocalDate.now获得它的价值。 接下来,我将创建一个格式化程序对象。 我将输入类的名称DateTimeFormatter ,然后从java.time.format包中选择它。 我将此对象命名为df 。 现在有多种创建格式化程序的方法。 最简单的方法之一是使用DateTmeFormatter类的常量。

我将再次输入DateTimeFormatter 。 然后输入句点后,我会看到所有可用常量的列表。 我将选择ISO Date 。 这将为此对象提供默认格式。 然后,我将使用系统输出。 我将调用格式化对象的format方法并传递date对象。 这就是结果。 我正在以年份月份日期格式输出值。 月份和日期分别填充为两个字符。 现在,您可以使用时间和日期时间来做同样的事情。

结果:

2016-08-06

我将使用上面的代码,并将其重复几次,然后进行一些更改。 在第二个版本中,我将类型从本地日期更改为本地时间。 当前时间的对象名称,以及我用来获取本地时间值的类的名称。 我将日期时间格式化程序的名称从DF更改为TF,以进行时间格式化程序。 然后将使用的常量更改为ISO Time 。 然后,我将更改要格式化的对象。 我将确保导入LocalTime类。

然后,我将对第三个版本进行类似的更改。 我这次要使用的类是LocalDateTime 。 我一定会导入它。 我将此对象命名为当前DT。 然后,我将更改从其调用now方法的类。 我将DateTimeFormatter的格式化程序更改为DTF。 然后将常数更改为ISO日期时间。 然后,我将格式化当前的DT对象。 我将确保在每个版本的代码中都使用正确的格式化程序。 我将保存更改,然后运行代码。

并且有三个格式化的值。 到目前为止,我还没有真正做到那么多,因为我使用了代表默认格式的常量。 但是,让我们看一下一些可用的自定义格式。

结果:

2016-08-09
20:37:11.535
2016-08-09T20:37:11.538

我下移到现有代码的下方。 然后我将创建另一个DateTimeFormatter ,将其命名为长日期格式的f_long ,然后通过调用DateTimeFormatter类的一种称为Localized Date的方法来获取其值。

请注意,存在用于日期,时间和日期时间的方法,并带有各种参数。 我将选择一个本地化日期,并传入一个名为FormatStyle的类的常量。 确保导入此类。 然后,键入句点后,您将看到有四个可用常数。 完整,长,中和短。 我将选择长版本,然后通过调用F _ long.format输出格式化的日期,然后传入当前的DT对象。

当我运行此代码时,会得到该日期的长版本。

结果:

August 9, 2016

我将通过复制这两行代码向您展示该版本的另一个版本,对于该版本,我将格式器名称更改为f_short,还将使用的常量也更改为short。 然后,我将更改正在调用的格式化程序的名称。 因此,长版本是阐明的月份名称。 日期后的逗号,然后是四位数字的年份,以及至少对于当前语言环境而言是短版的逗号,是月份和日期,不带填充,并使用斜杠分隔值和两个字符的年份。

结果:

8/9/16

接下来,我将向您展示如何使用语言环境。 我将创建几个字符串。 第一个缩写为fr_ short(法语),采用短格式。 为了获得该值,我将调用f_short格式化程序,然后将使用withLocal()调用方法名称。 为了获得语言环境值,我将使用Local类,这是Java的早期版本中可用的现有类。 它是程序包Java.util的成员。

然后,我可以调用代表各种语言环境的众多常量之一。 我会用法语。 然后从那里,我将调用format方法,并传入当前日期时间。

我将复制该行代码,对于该版本,我将使用fr_long。 我将使用长格式程序,否则代码将相同。 然后,我将输出这两个值fr_shortfr_long

这就是结果。 注意,对于fr_short,月份和日期与美国版本相反。 那是因为在欧洲,日期是第一个陈述的,然后是月份,然后是年份。 当我使用长版本时,我得到的月份是法文拼写的。

结果:

09/08/16
9 août 2016

最后,我将向您展示如何使用称为日期时间格式化程序构建器的类来构建完全自定义格式化程序。 它使用构建器设计模式,您可以在其中调用多个方法,每个方法都返回当前构建器的一个实例。

我将输入类的名称,并确保已将其导入。 我将对象命名为b。 我将使用new关键字和构造方法将其实例化。

现在,在该代码的末尾,我将不会放入分号,因为我想立即调用一系列让我从头开始构建格式化程序的方法。 我将从名为Append Value的方法开始。 请注意,有附加即时,附加文字,附加本地化等许多其他功能。 我将调用一个名为appendValue()的方法,该方法接受一个名为TemporalField的类的实例,然后使用一个名为ChronoField的枚举ChronoField 。 这是从该TemporalField扩展的。

从那里开始,我将使用一年中月份的常量名称。 接下来,我将附加一个文字值。 这可以是任何字符或任何字符串。 为了使它变得完全独特,我将添加几个竖线字符。 现在,我将使用这两行代码并将其复制为第二个版本,而不是一年中的月份。 我会输入一个月中的某天。 请注意,还有星期几和一年中的某天。 然后,我将复制该行代码并将其向下移动。 然后用ChronoField.year完成表达式。

一旦创建了构建器对象,就可以获取格式化程序。 我将创建一个新对象,其类型为DateTimeFormatter 。 我将其命名为Formatter f 。 然后将其称为构建器对象,以格式化程序的方法,最后我将格式化当前日期时间值。 我将使用系统输出并调用f.format() ,并传入currentDT

现在,当我运行代码时,我得到了完全自定义的格式。

结果:

222||9||2016

结论:
您可以使用DateTimeFormatter构建器构建所需的任何格式。 并且由于它使用了构建器设计模式,因此易于创建和维护代码。

4-支持时区偏移量:

介绍:
新的日期时间API提供了许多类,可让您管理时区 。 创建从格林威治时间偏移,通过一定的小时数 ,或者通过特定位置白天对象,计算时区之间的差异

怎么运行的:
我正在使用eg.com.tm.java8.features.datetime.zone项目的Java8Features包。 在名为TimeZones的类代码中。 main方法

在其主要方法中,我创建了一个DateTimeFormatter和一个LocalDateTime对象。 LocalDateTime代表我的系统上当前时区中当前日期和时间 。 那就是埃及时间,因为我在中东。

然后,我将格式化的值输出到控制台。 我正在使用短格式输出值。 在埃及符号中,它是月,日和年。

结果:

8/9/16 10:22 PM

为了表示基于时区的日期时间值,请使用ZonedDateTime类。 就像LocalDateTime一样,它是不可变的并且是线程安全的。 我将输入类的名称,然后按Control + Space来添加import语句。 我将对象gmt命名为格林威治标准时间。

创建此对象有几种不同的方法。 我将向您展示如何创建计算格林威治标准时间的偏移量的对象。 我将再次使用ZonedDateTime类,并在键入句点后,将看到有许多可用的方法。 我可以再次调用now() ,以获取我所在区域的日期时间值。 我可以调用允许进行各种计算的of()方法。 我可以解析字符串,但是我将使用此版本的now方法。 我将传递ZoneId类的实例。

ZoneId表示从格林威治标准时间偏移一定小时数。 我将通过调用名为ZoneId.of()的方法来获得该值。 然后我将传递一个文字字符串“ GMT + 0” 。 这就是说,请向我显示格林威治标准时间的当前日期和时间值。

现在,我将复制将值输出到控制台的代码。 我将其向下移动,并将此版本更改为输出gmt。 我将运行代码,并得到结果。

结果:

8/9/16 8:28 PM

我在中东埃及,现在,格林威治标准时间要提前两个小时。

这是获取ZonedDateTime另一种方法。 假设您想在纽约获得ZoneDateTime。 有许多内置的字符串或常量,它们可以让您命名特定的位置,并且您将获得该位置的正确ZoneId ,而您不必自己担心数学。 我将创建另一个ZonedDateTime对象,这次我将其命名为ny,代表纽约,并且我将通过调用ZonedDateTime.now()获得它的值,然后再次传递Z oneId.of() ,但这一次我要传递一串America / New_York

确保完全按照您在此处看到的字符串进行拼写 。 我将创建一行代码以输出该值。 我将保存更改,然后运行它。 纽约是美国东海岸时间,比太平洋时间早三小时。

结果:

8/9/16 4:36 PM

要找出所有可用的字符串,可以调用ZoneId类的方法,称为getAvailableZoneIds() 。 您将获得一套。 我将输入Set并按Control + Space ,然后从Java.util选择set。

然后将其中的项目的通用类型设置为String 。 我叫设置区。 然后,我将调用方法ZoneId.getAvailableZoneIds 。 然后,我将使用forEach()方法遍历字符串。 然后我将传递Lambda表达式。 因此,我可以依次处理每个项目。

结果:
运行该代码时,我会看到所有可用的字符串。

Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8
Africa/Nairobi
America/Marigot
Asia/Aqtau
Pacific/Kwajalein
America/El_Salvador
Asia/Pontianak
Africa/Cairo
Pacific/Pago_Pago
Africa/Mbabane
Asia/Kuching
Pacific/Honolulu
Pacific/Rarotonga
America/Guatemala
Australia/Hobart
Europe/London
America/Belize
America/Panama
Asia/Chungking
America/Managua
America/Indiana/Petersburg
Asia/Yerevan
Europe/Brussels
GMT
Europe/Warsaw
America/Chicago
Asia/Kashgar
Chile/Continental
Pacific/Yap
CET
Etc/GMT-1
Etc/GMT-0
Europe/Jersey
America/Tegucigalpa
Etc/GMT-5
Europe/Istanbul
America/Eirunepe
Etc/GMT-4
America/Miquelon
Etc/GMT-3
Europe/Luxembourg
Etc/GMT-2
Etc/GMT-9
America/Argentina/Catamarca
Etc/GMT-8
Etc/GMT-7
.................

现在,有太多东西可能很难找到想要的那个。 假设我想寻找伦敦

并在一年中的特定时间为该特定位置使用时区。 正如我在本文前面所展示的,我可以使用predicate来搜索字符串。 我将创建一个谓词对象。 然后将通用类型设置为String 。 我将命名对象条件。 然后,我将使用lambda表达式实现谓词。 我将传入str,然后使用条件实现该谓词。 str。包含,我将经过一系列伦敦。

然后,我将重构我的Lamba表达式。 我将用大括号将System.out.println()包装起来。 然后,我将扩展代码以使其更易于使用。 我将在打印行的末尾添加分号,然后创建一个if语句。 然后将条件设置为condition.test() ,并在z传递当前区域。 我将把p rintln()语句移到条件内,现在只打印与谓词测试匹配的字符串。

我将保存更改并运行代码,并得到结果。 我发现伦敦的正确字符串是:

结果:

Europe/London

结论:
因此,这与处理时区有关。 同样,使用ZonedDateTime类而不是LocalDateTime表示可以修改和计算的值。 ZoneId表示与格林威治标准时间的偏移量。 还有一个名为“区域偏移”的类,您可以用来计算彼此之间的不同时区。
资源:

  1. Java教程,线索:日期时间
  2. LocalDate API
  3. JSR 310:日期和时间API
  4. JSR 337:Java SE 8发行内容
  5. OpenJDK网站
  6. Java平台,标准版8,API规范

我希望您喜欢阅读它,就像我喜欢编写它一样,如果您喜欢它,请分享,传播信息。

翻译自: https://www.javacodegeeks.com/2016/08/java-se-8-new-features-tour-calculating-timespans-new-datetime-api.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用VS2012内建的C++测试架构进行单元测试

前言 在软件开发的过程中,单元测试(Unit testing)是一个重要的coding步骤,可以让你的程序代码质量大幅提升、协助你进行良好的程序架构设计,单元测试是针对程序单元(软件设计的最小单位)来进行正确性检验的测试工作,在程序化编程中…

【博 客 文 章】

1、C#中的Explicit和Implicit转载于:https://www.cnblogs.com/kikyoqiang/p/10270416.html

sql intersect mysql_SQL INTERSECT子句

SQL INTERSECT子句/操作符用于合并两个SELECT语句,但只从第一个SELECT语句返回完全相同于第二个SELECT语句结果的所有行。这意味着INTERSECT是由两个SELECT语句返回相同的行(唯一)。正如使用UNION操作,同样的规则可使用在INTERSECT运算符。 但MySQL不支持…

vs2010下release版本调试设置

设置在Release模式下调试的方法: 1.工程项目上右键 -> 属性 2.c -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) 3.c -> 优化 -〉优化 选 禁止(/Od) 4.连接…

控制反转 java_控制反转( Ioc)快速入门

2.1 什么是控制反转(IOC:Inverse of Control)IOC反转控制,实际上就是将对象的创建权交给了Spring,程序员无需自己手动实例化对象。可以看出来工厂的作用就是用来解耦合的,而在使用spring的过程中,spring就是充当这个工…

spring 工作流引擎_带Spring的简单工作流引擎

spring 工作流引擎几个月前,在处理一个公司项目时,我们需要开发REST服务,该服务用于根据客户端应用程序发送的数据发送电子邮件。 在开发此服务期间,我们决定创建简单的工作流引擎,该引擎将为发送电子邮件收费&#xf…

如何成为一个牛逼的C/C++程序员? (仔细阅读)

这个题目的噱头太大,要真的写起来, 足够写一本书了。 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路。 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。 一、C/C语言 如果你的…

java 两个字段排序,如何在Java中按两个字段排序?

I have array of objects person (int age; String name;).How can I sort this array alphabetically by name and then by age?Which algorithm would you use for this ?解决方案You can use Collections.sort as follows:private static void order(List persons) {Colle…

数据结构java语言描述朱战立_数据结构——树(Java语言描述)

树根:rootNode. 树只有一个树根。节点:Node. 树上的所有节点。子节点数组:Node[]. 数组代表每个节点的所有子节点父节点:parentNode. 每个节点只有一个父节点。2. Node为Tree中的内部类parent :指向父节点的引用childern: 孩子数组,存储该节点的所有子节…

centos7.4进入单用户模式

centos7.4进入单用户模式 1 - 在启动grub菜单,选择编辑选项启动2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init/sysroot/bin/sh 4 - 现在按下 Controlx ,使用单用户模式启动 5 - 现在,可以使…

判断某程序是64位还是32位

1. 用代码判断本身if (IntPtr.Size 4) {// 32-bit}else if (IntPtr.Size 8){// 64-bit}2. 用代码判断正在运行的其他进程http://stackoverflow.com/questions/1953377/how-to-know-a-process-is-32-bit-or-64-bit-programmatically3. 不用代码判断任意exe,看第二个…

MySQL 中 NULLIF 、IFNULL、IF 的用法和区别

在 MySQL 中,NULLIF、IFNULL 和 IF 是用于处理 NULL 值的三种不同的函数。 1. NULLIF 函数 NULLIF 函数用于比较两个表达式,如果它们的值相等,则返回 NULL,否则返回第一个表达式的值。语法如下: NULLIF(expr1, expr2…

32和64位jvm_我应该使用32位还是64位JVM?

32和64位jvm这是我在企业软件开发生涯中多次遇到的问题。 我不得不每隔一段时间就提供有关配置特定新环境的建议。 而且,很多时候,手头的问题与“我应该使用32位或64位JVM”有关。 老实说,一开始我只是掷硬币。 而不是给出合理的答案。 &…

spring java code配置_Spring-09-使用Java的方式配置Spring

9. 使用Java的方式配置Spring我们现在要完全不使用Spring的xml配置,全权使用Java来配置Spring!JavaConfig是Spring的一个子项目,在Spring4之后,他成为了一个核心功能。实体类:public class User {private String name;…

pythone函数基础(11)读,写,修改EXCEL

#读EXCEL需要导入xlrd模块---在python控制台pip install xlrd模块import xlrdbook xlrd.open_workbook(stu3.xls)sheet book.sheet_by_index(0)# sheet book.sheet_by_name(sheet1)# print(sheet.cell(0,0).value)#获取指定单元格的内容# print(sheet.cell(1,0).value)# pri…

强大的vim配置文件,让编程更随意

花了很长时间整理的,感觉用起来很方便,共享一下。 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C、C、java代码以及执行shell脚本,按“F8”可进行C、C代码的调试 2.自动插入文件头 ,新建C、C源文件时自动插…

java工程转maven工程_将java工程转换为Maven工程

1、创建一个Java工程,如下图所示:2、选中此工程 -> 右键 -> Configure -> Convert to Maven project。出现如下的截图:3、点击之后会弹出对话框,如下图所示:4、直接点击完成即可,此时会在java工程…

2019/4/17 Linux学习

一、Linux的文件系统 其中/prov、/srv、/sys 文件为文件系统,技术不过硬不要去修改;二、关于Xshell、Xft1、服务器的端口可有65535个可设置,开的越多安全性越差;2、远程登录主机时,会有一个sshd程序,22端口…

使用“另类” Cloud Foundry Gradle插件无需停机

我一直在尝试我的手在写一个gradle这个插件的应用程序部署到Cloud Foundry上 ,并写下这个插件在我以前的帖子 。 我现在通过使用两种方法支持将无停机时间部署到Cloud Foundry中来增强此插件: 自动驾驶风格部署和更常用的蓝绿色风格部署 。 要完全了解该…

UNIX网络编程 卷2 源代码使用

1. 下载源码,W. Richard Stevens的主页:http://www.kohala.com/start/wget http://www.kohala.com/start/unpv22e/unpv22e.tar.gz -P /usr/local/src 2. 解压tar xvf /usr/local/src/unpv22e.tar.gz -C /root/bin 3. 编译库文件cd /root/bin/unpv22e/ .…