首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将以毫秒为单位的日期转换为今天、昨天、最近7天、最近30天( Java

将以毫秒为单位的日期转换为今天、昨天、最近7天、最近30天( Java
EN

Stack Overflow用户
提问于 2012-09-10 14:13:38
回答 2查看 4.9K关注 0票数 4

我有一些文档,它的创建时间是毫秒。我需要将它们区分为今天,昨天,过去7天,过去30天,超过30天。

我使用了以下代码:convertSimpleDayFormat(1347022979786);

代码语言:javascript
复制
public static String convertSimpleDayFormat(Long val) {


            long displayTime = System.currentTimeMillis() - val;
            displayTime = displayTime/86400000;
            String displayTimeVal = "";
            if(displayTime <1)
            {
                    displayTimeVal = "today";  
            }
            else if(displayTime<2)
            {
                    displayTimeVal = "yesterday";
            } 
            else if(displayTime<7)
            {
                    displayTimeVal = "last7days";
            } 
            else if(displayTime<30)
            {
                    displayTimeVal = "last30days";
            }
            else
            {
                    displayTimeVal = "morethan30days";
            }
            return displayTimeVal;
    }

我正在减去当前时间,并传递毫秒,然后转换为一天。

但我面临的问题是,我无法以毫秒为单位计算出日期的确切时间。

我想计算今天的时间为:午夜00:00到午夜24:00。(正好是24小时。)

同样,我想准确地将毫秒转换为今天、昨天、过去7天、过去30天和超过30天。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-10 14:34:08

代码语言:javascript
复制
private static Calendar clearTimes(Calendar c) {
    c.set(Calendar.HOUR_OF_DAY,0);
    c.set(Calendar.MINUTE,0);
    c.set(Calendar.SECOND,0);
    c.set(Calendar.MILLISECOND,0);
    return c;
}

public static String convertSimpleDayFormat(long val) {
    Calendar today=Calendar.getInstance();
    today=clearTimes(today);

    Calendar yesterday=Calendar.getInstance();
    yesterday.add(Calendar.DAY_OF_YEAR,-1);
    yesterday=clearTimes(yesterday);

    Calendar last7days=Calendar.getInstance();
    last7days.add(Calendar.DAY_OF_YEAR,-7);
    last7days=clearTimes(last7days);

    Calendar last30days=Calendar.getInstance();
    last30days.add(Calendar.DAY_OF_YEAR,-30);
    last30days=clearTimes(last30days);


    if(val >today.getTimeInMillis())
    {
            return "today";  
    }
    else if(val>yesterday.getTimeInMillis())
    {
        return "yesterday";
    } 
    else if(val>last7days.getTimeInMillis())
    {
        return "last7days";
    } 
    else if(val>last30days.getTimeInMillis())
    {
        return "last30days";
    }
    else
    {
        return "morethan30days";
    }
}
票数 9
EN

Stack Overflow用户

发布于 2012-09-10 14:48:03

这是一个小的黑客,没有经过严格的测试。使用风险自负。我让它变得可扩展,这样你就可以添加新的持续时间。

代码语言:javascript
复制
public static String prettyTimeStamp(long timeStamp) {
        Calendar c = Calendar.getInstance();
        c.clear(Calendar.HOUR_OF_DAY);
        c.clear(Calendar.MINUTE);
        c.clear(Calendar.SECOND);
        c.clear(Calendar.MILLISECOND);
        long today = c.getTimeInMillis();
        final long oneDay = 24 * 60 * 60 * 1000L;
        final long[] durations = new long[] { today - oneDay, today,
                today + 7 * oneDay, today + 30 * oneDay };
        final String[] labels = "Yesterday,Today,Last 7 days,Last 30 Days,More than 30 Days"
                .split(",");
        int pos = Arrays.binarySearch(durations, timeStamp);
        return labels[pos < 0 ? ~pos : pos];
    }

顺便说一句,你真的应该使用像PrettyTime这样的库

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12346198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档