【问题标题】:Date Time Ago Converter日期时间前转换器
【发布时间】:2021-04-23 09:46:53
【问题描述】:

我有一个来自字符串响应的时间戳,我正在尝试将其转换为显示时间之前。

但是,我的转换器存在比当前时间晚 1 小时、1 天等的问题...

例如,当我在这里发布问题时,这个给定的时间戳 1610959169 显示 18 hours ago。实际上,我必须在线转换它,结果在19 hours ago 中给出。

请查看下面的转换类代码片段。

object DateTimeConvertUtil {
private val SECOND_MILLIS = 1000
private val MINUTE_MILLIS = 60 * SECOND_MILLIS
private val HOUR_MILLIS = 60 * MINUTE_MILLIS
private val DAY_MILLIS = 24 * HOUR_MILLIS
private val WEEK_MILLIS = 7 * DAY_MILLIS

fun getCreatedTime(givenTime: Long, isShowingWeek: Boolean? = false): String? {
    var time = givenTime
    if (time < 1000000000000L) {
        time *= 1000
    }
    val now = System.currentTimeMillis()
    if (time > now || time <= 0) {
        return null
    }
    val diff = now - time
    when {
        diff < MINUTE_MILLIS -> return "Just now"
        diff < 2 * MINUTE_MILLIS -> return "a minute ago"
        diff < 50 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
        diff < 90 * MINUTE_MILLIS -> return "an hour ago"
        diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"
        diff < 48 * HOUR_MILLIS -> return "Yesterday"
        diff < 7 * DAY_MILLIS -> return "${diff / DAY_MILLIS} days ago"
        else -> {
            return if (isShowingWeek!!) {
                when {
                    diff / WEEK_MILLIS <= 1 -> "${diff / WEEK_MILLIS} week ago"
                    diff / WEEK_MILLIS <= 52 -> "${diff / WEEK_MILLIS} weeks ago"
                    diff / WEEK_MILLIS <= 104 -> "a year ago"
                    else -> "2 years ago"
                }
            } else {
                showDate(time.toString())
            }
        }
    }
}

请帮我解决这个问题。谢谢。

【问题讨论】:

  • val date = Date(timeStamp * 1000) val ago = DateUtils.getRelativeTimeSpanString(date.time, System.currentTimeMillis(),DateUtils.MINUTE_IN_MILLIS,DateUtils.FORMAT_ABBREV_ALL).toString() 试试这个
  • @Raghunandan -- 你的建议非常好。但是如果我们想显示实际的措辞,我们需要调整文本输出。无论如何,谢谢你的评论。祝你有美好的一天。
  • 哦对了,措辞不同

标签: android timestamp


【解决方案1】:

在 Time ago 使用这个类

public class TimeAgo {
    public final static String monthAgo = " Month z";
    public final static String monthsAgo = " Months ago";

    public final static String weekAgo = " Week ago";
    public final static String weeksAgo = " Weeks ago";

    public final static String daysAgo = " Days ago";
    public final static String dayAgo = " Day ago";

    public final static String hourAgo = " Hour ago";
    public final static String hoursAgo = " Hours ago";

    public final static String minAgo = " Min ago";
    public final static String minsAgo = " Mins ago";

    public final static String secsAgo = " Secs ago";
    public final static String secAgo = "Just Now";
    static int second = 1000; // milliseconds
    static int minute = 60;
    static int hour = minute * 60;
    static int day = hour * 24;
    static int week = day * 7;
    static int month = day * 30;
    static int year = month * 12;

    public static String DateDifference(long fromDate) {
        long diff = 0;
        long ms2 = System.currentTimeMillis();
        // get difference in milli seconds
        diff = ms2 - fromDate;

        int diffInSec = Math.abs((int) (diff / (second)));
        String difference = "";
        if (diffInSec < minute) {
            if (diffInSec <= 1) {

                difference = secAgo;

            } else {
                difference = diffInSec + secsAgo;
            }
        } else if ((diffInSec / hour) < 1) {
            if ((diffInSec / minute) <= 1) {
                difference = (diffInSec / minute) + minAgo;
            } else {
                difference = (diffInSec / minute) + minsAgo;
            }
        } else if ((diffInSec / day) < 1) {
            if ((diffInSec / hour) <= 1) {
                difference = (diffInSec / hour) + hourAgo;
            } else {
                difference = (diffInSec / hour) + hoursAgo;
            }

        } else if ((diffInSec / week) < 1) {
            if ((diffInSec / day) <= 1) {
                difference = (diffInSec / day) + dayAgo;
            } else {
                difference = (diffInSec / day) + daysAgo;
            }
        } else if ((diffInSec / month) < 1) {
            if ((diffInSec / week) <= 1) {
                difference = (diffInSec / week) + weekAgo;
            } else {
                difference = (diffInSec / week) + weeksAgo;
            }

        } else if ((diffInSec / year) < 1) {
            if ((diffInSec / month) <= 1) {
                difference = (diffInSec / month) + monthAgo;
            } else {
                difference = (diffInSec / month) + monthsAgo;
            }
        } else {
            // return date
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(fromDate);

            SimpleDateFormat format_before = new SimpleDateFormat(
                    "yyyy-MM-dd HH:mm:ss");

            difference = format_before.format(c.getTime());
        }
        Log.e("time difference is: ", "" + difference);
        return difference;
    }
}

并像这样使用它

TimeAgo.DateDifference(time);

【讨论】:

  • 这是一个极好的答案。此外,如果您可以添加显示年份,它可能比这门课可以显示各种时间更完美。谢谢。
  • 是的,我会明确添加
  • 仍在等待查看您修改后的代码以显示年份。
【解决方案2】:

尝试更改这些:

diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 50 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 90 * MINUTE_MILLIS -> return "an hour ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"

diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 60 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"

您需要将 50 更改为 60 并删除

How to convert time to " time ago " in android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多