如何将字符串时间戳更改为人类可读的日期格式? [复制]

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 这不是有效的时间戳。时间戳应该是长值。

以上是关于如何将字符串时间戳更改为人类可读的日期格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将人类可读的日期转换为纪元时间戳

格式化日期对象以显示人类可读的日期

如何以人类可读的格式输出(到日志)多级数组?

如何将此特定的 varchar 转换为人类可读的日期格式?

如何将熊猫时间戳更改为 python 日期时间对象?

将日期从人类可读格式转换为纪元失败