从当前时代Java未来30天

如何解决从当前时代Java未来30天

我正在获取当前时间。以后如何增加1个月?

Date date = new Date();
int epoch = date.getTime();

时期的数据类型-整数($ int64)

准确地说:我想从当前时间开始增加30天。

我正在使用一个允许嵌入Groovy和Java代码的工具。我使用Date类是因为我可以轻松进行{​​{1}}和import java.text.DateFormat;的学习。我拥有的工具不支持import java.text.SimpleDateFormat;

解决方法

自Java 8开始,使用java.time进行时间使用

以纪元秒为单位,增加30天:

Instant.now().plus(30,ChronoUnit.DAYS).getEpochSecond()

以纪元毫秒为单位,增加30天:

Instant.now().plus(30,ChronoUnit.DAYS).toEpochMilli()
,

您不想使用Date,请使用日期时间API。

Instant.now().plus(30,ChronoUnit.DAYS)
,

这是我的处理方式:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,30);
long epoch = calendar.getTimeInMillis();
System.out.println(epoch);

结果:

1606785580218

这是毫秒。您可以除以1000,以秒为单位获取版本。注意:秒版本将适合int,而毫秒版本则需要较长的时间。因此,如果您想在int中使用秒版本,则可以这样做:

long epoch = ...
int epochSeconds = (int)(epoch / 1000);

BTW,Unix时间(Epoch时间,POSIX时间)定义为自1970年1月1日UTC以来的秒数。某些系统会以毫秒为单位返回该值,以提供更高的准确性,但此值正式是用纪元时间乘以1000所得的分数。

,

到目前为止,所有答案都是错误的。

那是因为您想要的是不可能

您正在混合完全不兼容的概念。您要添加1个没有时区和政治意义的实体(“ epoch-millis”,明确表示:没有时区信息!),除非您提供时区和时代,否则不能将其定义为任何特殊含义的概念

您不能将一个月加到一个纪元。不是因为Java不允许您这样做,还是因为很难编程。出于相同的原因,您无法执行此操作,因为您无法指向圆角。从定义上说,从字面上看是不可能的。

'epoch millis'这个概念基本上是关于某个时间的。诸如“太阳升起时”之类的事情。 “当我刚刚拍手时”。在Java中,最好用java.time.Instant的实例来表示此概念。它也用java.util.Date表示,这很有趣,因为它不像日期,而且j.u.Date确实是一个愚蠢的名字,作者后来才意识到,这就是为什么(几乎)所有已使用的方法都标记为@Deprecated,并带有注释,说明Date的名字完全是谎言。 j.u.Date不代表日期

一个月,那是完全不同的蠕虫罐头。大约一个月没有什么东西。可能要28天。 30天。 31天30天和一秒钟的额外时间。这可能是一个月甚至不存在,或者只有11天(当政治地区切换时区时,您会发生一些非常奇怪的事情)。

那么,如何在任何时间瞬间添加“一个月”?

不能。这是不可能的。您不知道要添加什么,因为无法确定是28天,29、30、31日,更不用说leap秒和时代怪异了(最近,萨摩亚切换到了日期线的另一侧,并且结果,他们的12月只有30天,著名的“共产主义革命”将共产主义引入了俄罗斯,发生在 11月,至少在整个世界(俄罗斯除外)方面,只有俄国人才是十月的朱利安历法。作为整个“共产主义将接管世界!”计划的一部分,他们做的第一件事就是与世界其他地方一样使用格里高利历法,结果,这个日期在俄罗斯历史上根本不存在:1918年2月1日至13日。他们只是……被跳过了。有一天,你在莫斯科醒来,走到外面,问某人:嘿,它是什么日期(虽然可能是俄语),他们说:为什么,1月31日,同志,第二天重复tha练习,现在是2月19日。因此,俄罗斯1918年2月的时长为15天

看看为什么“请加上1个月”不是一件不可能做的事情,除非您告诉我何时何地?如果您告诉我“在俄罗斯”,那么我仍然不知道我加15、31、30、29或28。如果您告诉我“ 1918年2月2日”,世界上,二月是28天。仅在俄罗斯才15岁。

现在,在一些以人为本的日期/时间结构中添加“一个月”,例如“嗯,现在,在阿姆斯特丹”,啊,这行得通:“这个月,现在在阿姆斯特丹的那个月”,这是一个有答案的问题。但是,“ epoch millis”是Java的意思:“即时的时间,没有任何和所有的地理信息”,并且由于缺少地理信息,也无法知道何时与任何时区相关,因此,完全是不可能。

那么,你能做什么?好吧,很多事情,但是首先您需要弄清楚自己想做什么,然后才有人可以告诉您如何做:

  • 我只想添加一个平均月的感觉,最后以纪元为单位。好的,然后添加2.629.800.000,这是一个粗略的估计(大约30.4375天,大约是一个月的平均时长。我不知道这可能会达到什么目的,但是肯定比这更好的计划加30天或31天或28天。
  • 我想首先将此千毫秒转换为人类会说的时间(以年,月,日,小时,分钟和秒为单位),然后将月值增加1,然后离开在那个,例如ZonedDateTime对象。好的,先确定您想要的时区,然后将纪元转换为ZonedDateTime,然后我们到达了“请再加上一个月”的意义,所以现在可以做到:.plusMonths(1),瞧。
  • 与以前相同,但随后将其转换回纪元。好的,做同样的事情,最后调用.toInstant(),然后调用toEpochMillis()

大多数其他想法归结为:您的问题没有道理,无法回答。

注意:以上全部使用java.time软件包。所有其他选项(java.util.Datejava.util.Calendar都已损坏且笨拙;通常,尝试执行此操作或这些API中与日期相关的其他工作将是不可能的,将给出错误的答案,或者有一种方法但是很难弄清楚如何维护代码以及如何维护代码,为什么要主动打脸呢?为什么要自愿使用废话API?不要这样做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?