我正在调用一个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?
答案 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);