Java 时间戳检索方法
我现在正在写一个方法来获取帖子上传到Firebase的时间和今天的日期/时间之间的差异。根据我看过的视频和这里的其他帖子,这是我想出的方法Java 时间戳检索方法,java,android,firebase,timestamp,Java,Android,Firebase,Timestamp,我现在正在写一个方法来获取帖子上传到Firebase的时间和今天的日期/时间之间的差异。根据我看过的视频和这里的其他帖子,这是我想出的方法getTimeDate。我将它传递给我的ViewHolder,尽管我得到了一个E/:getTimeDate:ParseException:unparseabledate:“1576534039437”。本以为不错,但今天又回来了 我的代码有什么问题 目标是让TextView说出6个小时前、32分钟前、4天前之类的话 PostAdapter.java if ("
getTimeDate
。我将它传递给我的ViewHolder
,尽管我得到了一个E/:getTimeDate:ParseException:unparseabledate:“1576534039437”
。本以为不错,但今天又回来了
我的代码有什么问题
目标是让TextView
说出6个小时前、32分钟前、4天前之类的话
PostAdapter.java
if ("".equals(post.getTimestamp())) {
holder.timestamp.setVisibility(View.GONE);
} else {
if (post.getPostid() != null) {
holder.timestamp.setVisibility(View.VISIBLE);
String timestampDifference = getTimeDate();
if (!timestampDifference.equals("0")) {
holder.timestamp.setText(timestampDifference + " days ago");
} else {
holder.timestamp.setText("Today");
}
}
}
int position;
//TIMESTAMP
private String getTimeDate() {
final Post post = mPost.get(position);
final String TAG = "";
String difference = "";
Calendar calendar = Calendar.getInstance();
//Date format
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
//Today's date
Date today = calendar.getTime();
simpleDateFormat.format(today);
Date timestamp;
try {
if (post.getTimestamp() != null) {
timestamp = simpleDateFormat.parse(post.getTimestamp().toString());
difference = String.valueOf(Math.round(((today.getTime() - timestamp.getTime()) / 1000 / 60 / 60 / 24)));
}
} catch (ParseException e) {
Log.e(TAG, "getTimeDate: ParseException: " + e.getMessage());
difference = "0";
}
return difference;
}
以下是在这种情况下有效的解决方案
private Date date1, date2;
.
.
.
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
.
date1 = new Date(); // current datetime
date2 = simpleDateFormat.parse(datetimeFromPost); // date in string format from post.
.
printDifference(date1,date2);
public void printDifference(Date startDate, Date endDate) {
//milliseconds
long different = endDate.getTime() - startDate.getTime();
long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;
long elapsedDays = different / daysInMilli;
different = different % daysInMilli;
long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;
long elapsedMinutes = different / minutesInMilli;
different = different % minutesInMilli;
long elapsedSeconds = different / secondsInMilli;
String difference= "";
String diffDays = "";
String diffHours = "";
String diffMins = "00:";
String diffSeconds = "00";
if (elapsedDays > 0) {
if (elapsedDays == 1) {
diffDays = elapsedDays + " day ";
} else {
diffDays = elapsedDays + " days ";
}
}
if (elapsedHours > 0) {
diffHours = String.format("%02d", elapsedHours) + ":";
}
if (elapsedMinutes > 0) {
diffMins = String.format("%02d", elapsedMinutes) + ":";
}
if (elapsedSeconds > 0) {
diffSeconds = String.format("%02d", elapsedSeconds) + "";
}
difference= diffDays + diffHours + diffMins + diffSeconds + "ago";
// here is the difference between datetime in "00:00:00 ago"
}
你想做的就是得到日期/时间的差异?您遇到了什么错误?@Jacks介于文章上载到Firebase的时间和当前日期/时间之间。必须是“6小时前”、“32分钟前”、“3天前”等@Jacks还有,我在这里得到了一个
null指针,但是idk whyDate postTimestamp=simpleDataFormat.parse(post.getTimestamp().toString())代码>如果将printDifference()作为一个单独的方法,那么它更好,并且可以重用。只需传递日期值,以您想要的任何格式更新日期差。如图所示,我添加了日期、小时、分钟和秒。我将尝试一下。让你知道它是否有效。谢谢,bronull指针一定是因为数据问题,而不是这个方法提供了更易于理解的代码,您可以根据需要编辑为日期戳的任何格式。在您的情况下,如果您只需要“天”,您可以跳过其他可用选项,如分钟和小时。另外,在同一天,你只能显示小时,如果是第二天,你可以只显示'天'让我们。