用java.time包中的Clock类得出的当前时间不对

用java.time包中的Clock类得出的当前时间不对,第1张

时区的问题 你在能得到的时间上加8就是北京时间

LocalDate mLocalDate=LocalDatenow();

LocalTime specificTime = LocalTimenow();

这两个代表当地时间 你可以看看

本篇博客中我们将采用类似的方法,并熟悉Scala编程语言的另一个重要特性— 模式匹配 。同样我们将通过编写一些简短的代码片段,一系列小步骤来逐步深入。

case 类的许多其他有用特性(例如结构化 equals、hashCode、copy 和 toString)中,Scala 编译器支持以下代码

请注意这里的一个很好的对称性:构造时me 在左侧,带有两个字符串参数的 FullName() 在赋值的右侧,解构时正好相反。

当谈到 Scala 模式匹配时,首先想到的是 match 语句(它类似于许多其他编程语言中的 switch / case,但是更强大)。可以在 Scala 中的很多地方可以使用模式匹配:你可以在定义 lambda 函数时使用它,也可以在 for-comprehension 生成器的左侧,甚至在上面例子中的赋值语句中。为简单起见,在本文的其余部分,我们将主要在赋值语句中使用模式匹配。

现在我们已经定义了case类以及一些使用它的代码,接着尝试了解 Scala case类的特别之处以及如何使用相关代码。有时理解某事物如何工作的一个非常好的方法是破坏它,然后尝试使其再次工作!先将 FullName 类定义的 case 关键字排除

如果尝试上述代码,会发现代码(value me 的构建和它的解构)编译报错。为了修复它,我们需要在事情开始崩溃之前手动实现 Scala 编译器之前提供给我们的功能,我们为 FullName 类添加一个伴随对象

Scala 中的伴生对象是一个单例,与它的伴生类同名且在同一个文件中。而且伴随对象和它的类可以访问彼此的私有成员。伴生对象是放置类的静态成员的地方(与 Java 不同,Scala 没有 static 修饰符),这提供了更清晰的静态/实例成员分离。

注意:我们必须稍微更改 FullName 类定义,以使 FullNameunapply 编译成功

如果不进行修改,first 和 last 只会作为构造函数的参数,无法通过 unapply 访问它们。在 first 和 last 之前添加 val 会将它们同时转换为构造函数参数和实例字段(默认为 public)。在我们删除 case 关键字之前Scala 编译器会自动为我们生成此功能以及伴随对象。

现在手动添加所有这些代码可以修复编译问题,继续让我们深入了解刚刚实现的两个方法的细节

apply 是 Scala 中的一个特殊方法名称,按照约定可以在代码中省略,所以 FullName() 等价于 FullNameapply() ,我们正在使用它来构造 FullName 的新实例,而无需 new 关键字。

unapply 正好相反——它解构了一个 FullName 的实例,并且是模式匹配的基础,接下来我们将重点介绍这种方法,在这种情况下,它将 FullName 解构为两个字符串值,并将它们包装在 Some 中,这意味着它可以匹配 FullName 的任何实例(稍后我们将探讨部分匹配partial matching)。

再次注意这两个方法的对称性: apply 将两个字符串作为参数,并返回一个 FullName 的实例。而 unapply 则恰好相反。

现在我们对什么是 unapply 以及它如何用于解构/模式匹配有了一个非常基本的了解。在大多数情况下,它已经由 Scala 处理—— unapply 的实现不仅为我们编写的所有case类提供,而且为几乎所有 Scala 标准库中的所有内容提供,包括集合(如果适用),事实上实现自己的 unapply 并不常见,除非你是某个有趣库的开发者,然而我们可以作弊—在Java中unapply 肯定不存在,让我们从 javatime 中获取一些类,并在它们上添加对 Scala 模式匹配的支持

能够将 Date 分解为年、月和日,将 Time 分解为小时、分钟和秒,这很自然。此外DateTime — 转换为日期和时间,根据我们已有的知识,这非常简单。但是我们不能使用名称 LocalDate、LocalDateTime 和 LocalTime 来创建合适的伴生对象,因为伴生对象需要与对应的类放在相同的文件,但由于这些类来自 Java 标准库,因此不可能。为了避免名称冲突,我们简单地将实现对象的名称中省略 Local

接着使用它们:

LocalDate 和 LocalTime 都按照预期被解构为 3 个 Int 值。如果我们只需要一些解构的值而不需要其他值,可以使用下划线代替那些不需要的值

一个更有趣的例子是 LocalDateTime 的嵌套解构

这为我们提供了 6 个 Int 值(日期部分为 3,时间部分为 3)。

模式匹配的另一个非常有用的特性是整个值的赋值,这可以在解构之外完成。对于我们的 DateTime 示例,它可能如下所示

除了 6 个 Int 值,还得到一个 LocalDate 值,一个是 LocalTime 值,最后是 LocalDateTime 的整个值(以 dt 为单位)。

在上面的所有示例中,我们都解构为固定数量的值——(年、月、日)、或(时、分、秒)或(日期、时间)。在某些情况下我们需要处理一系列值,而不是某些固定数量的值,可以尝试通过将 LocalDateTime 解构为一系列 Int

unapplySeq 是 unapply 的变体,它解构为一系列值而不是固定大小的元组。在这个例子中,序列的长度总是 6,但可以省略它的尾部,因为不需要它

_ 是 Scala varargs 的语法

到现在为止, unapply / unapplySeq 总是返回 Some。为此 unapply 将返回 Some 以防该值符合某些条件,而 None 则不符合。我们已经在处理 LocalTime 的值,将它们匹配到 AM 或 PM 时间将是一个自然的例子

其中 case _ => 是默认情况,如果没有其他匹配项,则会使用此进行匹配,此外我们刚刚介绍了另外两个用于部分匹配的功能

•守卫(guards),例如case Time(h, m, s) if h < 12•常量匹配,例如case Time(12, m, s)

现在已经看到 Scala 模式匹配的强大功能!

我们自己实现一个可以很好地格式化当前时间的时钟,通过使用模式匹配和 AM / PM 提取器(加上一些看起来像表情符号流的老派 Java 字符串格式)

我们已经 探索 了 Scala 模式匹配的大部分特性。可以在这里 [1] 找到这篇博文的所有源代码,为了更好地理解可以在 IntelliJ IDEA中运行这些代码,最后如果 Scala 代码中有一些复杂的、嵌套的 ifs 和 elses,请尝试使用模式匹配来更好地重构它。

[1] 这里: >

下面:

wmic /node:ip /user:id /password:pwd os get localdateime

ip - 远程服务器的ip地址:

id - 远程登录的账号

pwd - 远程登录账号的密码

前提条件:

① 在远程电脑上有合法账号

② 该账号运行远程登录

③ 防火墙设置了允许dcom和wim的规则

④ dcom和wim安装设置,允许该id或所在组有运行的权限(wmi namespace和Impersonation Rights)

运行:

放到批处理里面的代码:替换:ip, id, pwd = 后面的内容

@echo off & setlocal enabledelayedexpansion

set "ip=111111111111"

set "id=user"

set "pwd=123"

for /f "delims=" %%a in ('wmic /node:%ip% /user:%id% /password:%pwd% os get localdatetime ^| findstr \') do (

  set "dt=%%a"

  set "year=!dt:~0,4!"

  set "month=!dt:~4,2!"

  set "day=!dt:~6,2!"

  set "hour=!dt:~8,2!"

  set "minute=!dt:~10,2!"

  set "second=!dt:~12,2!"

  echo !year!-!month!-!day! !hour!:!minute!:!second!

)

endlocal &@echo on

运行:

2015-01-28 07:35:15

java8带来了很多新特性,其中最重要的一个特性就是新的时间和日期API。老的时间日期API存在很多问题,不过在java8中这些特性将不复存在。但是,JPA会把LocalDate和LocalDateTime映射成BLOB类型,而不是DATE或TIMESTAMP

/

获取上周五时间

/

public Date lastFirday() {

//作用防止周日得到本周日期

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

int dayOfWeek = calendarget(CalendarDAY_OF_WEEK) - 1;

int offset = 7 - dayOfWeek;

calendaradd(CalendarDATE, offset - 9);

return DateTimeUtilgetFirstDayOfWeek(calendargetTime(), 6);//这是从上周日开始数的到本周五为6

}

/

获取上周一时间

/

public Date lastMonday() {

Calendar calendar = CalendargetInstance();

while (calendarget(CalendarDAY_OF_WEEK) != CalendarMONDAY) {

calendaradd(CalendarDAY_OF_WEEK, -1);

}

int dayOfWeek = calendarget(CalendarDAY_OF_WEEK) - 1;

int offset = 1 - dayOfWeek;

calendaradd(CalendarDATE, offset - 7);

return DateTimeUtilgetFirstDayOfWeek(calendargetTime(), 2);

}

SystemcurrentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,用来计算当前毫秒与1970年1月1日之间的毫秒差。

那么我们就可以long time=SystemcurrentTimeMillis();

然后换算一下小时,发现1小时等于3600s等于3600000ms。

那么我们把这个long类型的time进行一次取余运算。

int min=time%3600000;

那么只要min的值小于一分钟,即60000ms即可。

if(min<60000)Systemoutprintln("当前时间为整点");

else println("非整点");

整体简化代码如下:

if(SystemcurrentTimeMillis()%3600000<60000)Systemoutprintln("当前时间为整点");

else println("非整点");

要修改软件开发环境日志日期,需要先确定使用的日志框架和日志格式。通常,在日志中记录日期和时间的方式包括以下两种:

1 直接在日志消息中记录日期和时间。例如,[2022-06-22 23:59:59] INFO: This is an information message

2 使用日志框架提供的日期格式化器将日期和时间格式化为特定的格式,并将其添加到日志消息中。例如,使用log4j框架的日期格式化器,可以将日期格式化为"yyyy-MM-dd HH:mm:ss",然后将其添加到日志消息中。

无论哪种方式,在将日期添加到日志中之前,都需要先获取当前日期。可以使用Java的日期类(如javautilDate或javatimeLocalDateTime)获取当前日期。然后,根据所选择的日志格式,将日期格式化为特定的格式,并将其添加到日志消息中。

如果要修改已有日志文件的日期,可以使用一个文本编辑器(如Notepad++)查找并替换所有出现的日期。但这种方法只适用于少量的日志文件。如果有大量的日志文件需要修改日期,可以编写一个脚本来自动化该过程。

时间格式化输出主要有两种方式,代码如下:

//使用Calendar

Calendar now = CalendargetInstance();

Systemoutprintln("年:" + nowget(CalendarYEAR));

Systemoutprintln("月:" + (nowget(CalendarMONTH) + 1));

Systemoutprintln("日:" + nowget(CalendarDAY_OF_MONTH));

Systemoutprintln("时:" + nowget(CalendarHOUR_OF_DAY));

Systemoutprintln("分:" + nowget(CalendarMINUTE));

ystemoutprintln("秒:" + nowget(CalendarSECOND));

//使用Date

Date d = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Systemoutprintln("当前时间:" + sdfformat(d));

扩展资料

JAVA中获取当前系统时间。

import javautilDate;

import javatextSimpleDateFormat;

public class NowString {

public static void main(String[] args) {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

Systemoutprintln(dfformat(new Date()));// new Date()为获取当前系统时间

}

}

参考资料来源:百度百科:Java

以上就是关于用java.time包中的Clock类得出的当前时间不对全部的内容,包括:用java.time包中的Clock类得出的当前时间不对、详解 Scala 模式匹配、批处理怎么获取远程计算机系统时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9344689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存