如何在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 年初)。以毫秒为单位跟踪日期时间值,例如尝试按位跟踪文本,而不是使用 String、FileReader 和 FileWriter 对象。我们有很好的日期时间库,所以请使用它们。
乔达时间 | 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:00
或2014-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
一起,查看Period
和Duration
处理时间跨度的各个方面。【参考方案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 状态