如何在java中保存和加载当前时间?

Posted

技术标签:

【中文标题】如何在java中保存和加载当前时间?【英文标题】:How do I save and load the current time in java? 【发布时间】:2014-03-10 19:05:52 【问题描述】:

我需要能够在 java 中保存和加载当前时间。我可以使用System.currentTimeMillis() 将其存储在很长的位置,但我还需要能够以不同的格式将其写出来,例如; “yyyy-mm-dd”、“dd/mm 小时:分钟:秒”等。

该程序会将我从System.currentTimeMillis() 获得的时间保存到一个 txt 文件中,因此即使计算机或程序发生问题,它也需要能够立即返回到它的任务中。

【问题讨论】:

【参考方案1】:

tl;博士

序列化

序列化为文本:

java.time.Instant.now().toString()

2018-01-01T01:23:45.123456789Z

从文本实例化:

Instant.parse( “2018-01-01T01:23:45.123456789Z” )

格式化字符串

调整到时区:

instant.atZone( ZoneId.of( “Africa/Tunis” ) )  // Instantiate a `ZonedDateTime` object 

生成其他格式的字符串:

DateTimeFormatter.ofPattern( … )

…或者,更好:

DateTimeFormatter.ofLocalized…

…然后:

myZonedDateTime.format( formatter )

跟踪日期时间值,而不是毫秒

一般来说,以毫秒为单位跟踪日期时间值是一件棘手的事情,应该避免。当人类阅读时,这些值是没有意义的。不同的软件使用不同的数字(秒、毫秒和纳秒)。不同的软件使用不同的epochs(并不总是像您所期望的那样是 1970 年初)。以毫秒为单位跟踪日期时间值,例如尝试按位跟踪文本,而不是使用 StringFileReaderFileWriter 对象。我们有很好的日期时间库,所以请使用它们。

乔达时间 | java.time

对于好的日期时间库,我指的是 Joda-Time 或 Java 8 中的新 java.time 包。避免使用较旧的捆绑类 java.util.Date 和 .Calendar,因为它们非常麻烦。

要开始使用 Joda-Time,请尝试:

System.out.println( DateTime.now() );

然后在 *** 中搜索“joda”或“joda date”。

ISO 8601

将日期时间值序列化到文本存储时,使用YYYY-MM-DDTHH-MM-SS.sss+00:00 的ISO 8601 格式,例如2014-03-11T23:54:15+01:002014-03-11T22:54:15Z。这种格式是明确的。该格式在各种文化中都很直观。按字母顺序排序的值也按时间顺序排序。

Joda-Time 库默认使用 ISO 8601 格式。类似地,Java 8 中的 java.time 包(受 Joda-Time 启发,由 JSR 310 定义)也使用 ISO 8601,但通过在括号中附加时区的专有名称(例如 2014-03-11T15:54:15+08:00[America/Los_Angeles])来扩展该格式。

【讨论】:

我会考虑到这一点,我最担心的是计算两个日期之间的时间(以毫秒为单位)要容易得多。 @Yemto 日期时间工作是一项棘手的棘手挑战。使用毫秒可能似乎更容易,但从长远来看并非如此。要确定两个日期时间之间的时间跨度,请使用 Joda-Time 中的 Interval 类(在 Java 8 中的 java.time 中类似)。在 *** 中搜索“joda interval”以查找示例。与Interval 一起,查看PeriodDuration 处理时间跨度的各个方面。【参考方案2】:

存储为从System.currentTimeMillis() 返回的长值并使用Date date=new Date(long value); 加载回来

您可以使用 Calendar 类或 SimpleDateFormat,如下代码所示:

import java.text.SimpleDateFormat;
import java.util.Calendar;

Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(format.format(cal.getTime()));

阅读更多关于Date formatting using SimpleDateFormat的信息。

【讨论】:

【参考方案3】:

你可以使用类似下面的代码

String formatted = new SimpleDateFormat("yyyy-mm-dd").format(new Date(System.currentTimeMillis()));

【讨论】:

【参考方案4】:

您需要日期 http://docs.oracle.com/javase/7/docs/api/java/util/Date.html 对于格式化,您需要 SimpleDateFormat

Date date = GregorianCalendar.getInstance().getTime();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
System.out.println(sdf.format(date));

您可以使用文本文件,也可以使用 ObjectOutputStream,因为 Date 是可序列化的。

【讨论】:

以上是关于如何在java中保存和加载当前时间?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在不同活动之间切换时保存当前的 onCreate 状态

如何在空手道 UI 自动化框架中截取屏幕截图并将其保存为当前日期和时间 [重复]

检测当前前台活动并重新加载它

如何将当前使用的光标保存到流(资源或文件)中?

在 R 中保存和加载模型

jsp怎么把当前时间(java中数据类型)转换成能在mysql中保存的时间戳(int(11))