在Java中将Date.toString()转换回Date

时间:2015-05-07 15:17:00

标签: java android

我正在调用一个API,并且根据每次调用它的指南都是低效的,因为数据不会定期更改。他们建议调用一次,然后在10分钟后才进行轮询。

我从Android应用程序调用此功能,所以我想存储当前日期加上10分钟。我是这样做的:

Date forecastRefreshDate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(forecastRefreshDate);
cal.add(Calendar.MINUTE, 10);
editor.putString("ForecastRefreshDate", forecastRefreshDate.toString());
editor.apply();

所以现在再次运行此代码时,需要检查当前时间(新的Date())是否为>保存在缓存/应用程序文件中的值。

如何创建一个等于存储在缓存中的值的Date变量作为String?

5 个答案:

答案 0 :(得分:1)

将日期转换为纪元时间,这是一个以毫秒为单位存储的毫秒数。存储为字符串长,并在需要时解析为长​​。

long epoch = date.getTime(); //where date is your Date
String yourString = Long.toString(epoch); //to string for storage
long time = Long.valueOf(yourString).longValue(); ; //back to epoch
Date originaldate = new Date(Long.parseLong(time)); //back to date

答案 1 :(得分:1)

在处理时间时,仅在内部测量时间段, 将时间戳存储为长值(millis sicne 1.1.1970 UTC)要好得多。

使用long timestamp = System.currentTimeMillis()

如果需要String存储,只需将Long转换为String。

String timeStampStr = String.parseLong(timeStamp);

除了记录或调试之外,不要使用Date.toString。 toString()表示在其他国家可能有所不同。 如果需要人类可读的时间戳字符串,则必须指定特定的DateFormat,另请参阅DateFormatter

答案 2 :(得分:1)

解析它是最有效的方式,但是可能有些情况下你已经将日期格式化为其他格式并想要解析它。那你应该用这个

private static final String format = "yyyy-MM-dd HH:mm:ss";
private static final SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.ENGLISH);
private Calendar dateTime = Calendar.getInstance();

public void setDateTime(String dateTimeString) {
    try {
        dateTime.setTime(formatter.parse(dateTimeString));
    } catch (ParseException e) {
         // Dummy handled exception
        dateTime.setTimeInMillis(0);
    }
}

从epoch

开始解析一段长的毫秒
Date date = new Date(Long.parseLong(timeInMillisecondsString));

答案 3 :(得分:0)

对于日期转换,您可以使用DateFormat课程 - 阅读parse方法

答案 4 :(得分:0)

由于您使用的是普通toString(),因此使用SimpleDateFormat可以覆盖它。

试试这个:

DateFormat dateFormat = new SimpleDateFormat();
Date myDate = dateFormat.parse(myDateString);