如何将字符串时间戳更改为人类可读的日期格式? [复制]
Posted
技术标签:
【中文标题】如何将字符串时间戳更改为人类可读的日期格式? [复制]【英文标题】:How to change string time stamp into Human readable date format? [duplicate] 【发布时间】:2017-07-19 10:09:21 【问题描述】:我正在尝试将字符串时间戳转换为以下内容:
2 分钟前。 1 小时前。 4天前。 3个星期前。 5个月前。 1 年前。
我正在使用 Java 的 DateUtils.getRelativeTimeSpanString()
method 进行转换,但它显示的日期类似于 2016 年 9 月 1 日。我希望它显示为 6 个月前。
代码如下:
long now = System.currentTimeMillis();
System.err.println();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH);
Date startDate;
try
startDate = df.parse(userLogs.get(i).getDate());
String sds = (String) DateUtils.getRelativeTimeSpanString(startDate.getTime(),System.currentTimeMillis(),DateUtils.MINUTE_IN_MILLIS);
System.err.println(sds);
catch (ParseException e)
e.printStackTrace();
更新:我不想使用 Joda time 或任何其他库,为什么它被标记为重复我不明白!
【问题讨论】:
考虑使用 JodaTime,see this previous answer 将来是startDate
吗? (不是过去)
@Yazan 这么想,看看你评论旁边的时间,现在它会显示 44 秒前,稍后它会变成别的东西,我想要这样
我知道你的意思,我在问 9 是否出于任何原因)startDate 是在未来,--尚未到来--因为基于这个答案***.com/a/15216466/3604083 使用分钟作为分辨率将显示日期,您需要使用天数作为分辨率
@praneethkumar 如果解决了您的问题,请查看我的回答,然后请接受此回答。
【参考方案1】:
请尝试使用这个类
long time = Long.valueOf(getDateFromDateTime("2016-09-01 15:57:20"));//2016-09-01 15:57:20 pass your date here
String timeStr = TimeUtility.timeAgo(time/1000);
输出:一分钟前
public long getDateFromDateTime(String date)
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
Locale.US);
Date new_date;
long t = 0L;
try
new_date = df.parse(date);
t = new_date.getTime();
return t;
catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
public class TimeUtility
public static String timeAgo(long time_ago)
long cur_time = (Calendar.getInstance().getTimeInMillis()) / 1000;
long time_elapsed = cur_time - time_ago;
long seconds = time_elapsed;
int minutes = Math.round(time_elapsed / 60);
int hours = Math.round(time_elapsed / 3600);
int days = Math.round(time_elapsed / 86400);
int weeks = Math.round(time_elapsed / 604800);
int months = Math.round(time_elapsed / 2600640);
int years = Math.round(time_elapsed / 31207680);
// Seconds
if (seconds <= 60)
return "just now";
//Minutes
else if (minutes <= 60)
if (minutes == 1)
return "one minute ago";
else
return minutes + " minutes ago";
//Hours
else if (hours <= 24)
if (hours == 1)
return "an hour ago";
else
return hours + " hrs ago";
//Days
else if (days <= 7)
if (days == 1)
return "yesterday";
else
return days + " days ago";
//Weeks
else if (weeks <= 4.3)
if (weeks == 1)
return "a week ago";
else
return weeks + " weeks ago";
//Months
else if (months <= 12)
if (months == 1)
return "a month ago";
else
return months + " months ago";
//Years
else
if (years == 1)
return "one year ago";
else
return years + " years ago";
【讨论】:
每次都返回刚才 @praneethkumar 你能和我分享你的旧时间戳吗?所以我可以测试它。我确定你没有使用有效的时间戳,这就是你得到这个的原因。 @praneethkumar 请使用此网站确认您的时间戳epochconverter.com 2016-09-01 15:57:20 我把这个作为时间戳 @praneethkumar 首先将您的日期转换为时间戳。 2016-09-01 15:57:20 这不是有效的时间戳。时间戳应该是长值。以上是关于如何将字符串时间戳更改为人类可读的日期格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章