当前位置: 首页 > 面试题库 >

需要使用“ A Min ago”或“ A Hour Ago”之类的字符串进行时差

奚晟
2023-03-14
问题内容

我是Android开发的新手。

我需要一个帮助将当前时间与一个静态时间转换。

您的帮助将不胜感激。

我有一个这样的字符串

String created_at = "Wed Mar 03 19:37:35 +0000 2010";

我想将其转换为,这意味着当前时间和created_at字符串之间存在差异。

23 mins ago // Example

谢谢,


问题答案:

只需使用我创建的以下实用工具类并在其构造函数中传递两个date对象,然后使用 getDifferenceString() 方法即可获取相同的对象。

 public class TimeDifference {
        int years;
        int months;
        int days;
        int hours;
        int minutes;
        int seconds;
        String differenceString;



        public TimeDifference(Date curdate, Date olddate) {

            float diff=curdate.getTime() - olddate.getTime();
            if (diff >= 0) {
                int yearDiff = Math.round( ( diff/ (365l*2592000000f))>=1?( diff/ (365l*2592000000f)):0);
                if (yearDiff > 0) {
                    years = yearDiff;
                    setDifferenceString(years + (years == 1 ? " year" : " years") + " ago");
                } else {
                    int monthDiff = Math.round((diff / 2592000000f)>=1?(diff / 2592000000f):0);
                    if (monthDiff > 0) {
                        if (monthDiff > 11)
                            monthDiff = 11;

                        months = monthDiff;
                        setDifferenceString(months + (months == 1 ? " month" : " months") + " ago");
                    } else {
                        int dayDiff = Math.round((diff / (86400000f))>=1?(diff / (86400000f)):0);
                        if (dayDiff > 0) {
                            days = dayDiff;
                            if(days==30)
                                days=29;
                            setDifferenceString(days + (days == 1 ? " day" : " days") + " ago");
                        } else {
                            int hourDiff = Math.round((diff / (3600000f))>=1?(diff / (3600000f)):0);
                            if (hourDiff > 0) {
                                hours = hourDiff;
                                setDifferenceString( hours + (hours == 1 ? " hour" : " hours") + " ago");
                            } else {
                                int minuteDiff = Math.round((diff / (60000f))>=1?(diff / (60000f)):0);
                                if (minuteDiff > 0) {
                                    minutes = minuteDiff;
                                    setDifferenceString(minutes + (minutes == 1 ? " minute" : " minutes") + " ago");
                                } else {
                                    int secondDiff =Math.round((diff / (1000f))>=1?(diff / (1000f)):0);
                                    if (secondDiff > 0)
                                        seconds = secondDiff;
                                    else
                                        seconds = 1;
                                    setDifferenceString(seconds + (seconds == 1 ? " second" : " seconds") + " ago");
                                }
                            }
                        }

                    }
                }

            }

        }
        public String getDifferenceString() {
            return differenceString;
        }

        public void setDifferenceString(String differenceString) {
            this.differenceString = differenceString;
        }
        public int getYears() {
            return years;
        }

        public void setYears(int years) {
            this.years = years;
        }

        public int getMonths() {
            return months;
        }

        public void setMonths(int months) {
            this.months = months;
        }

        public int getDays() {
            return days;
        }

        public void setDays(int days) {
            this.days = days;
        }

        public int getHours() {
            return hours;
        }

        public void setHours(int hours) {
            this.hours = hours;
        }

        public int getMinutes() {
            return minutes;
        }

        public void setMinutes(int minutes) {
            this.minutes = minutes;
        }

        public int getSeconds() {
            return seconds;
        }

        public void setSeconds(int seconds) {
            this.seconds = seconds;
        }

    }


 类似资料:
  • 被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是反字符类的错误应用。

  • 在我的作业中,我对字符串Lexer有以下描述: “字符串文字由零个或多个用双引号(”“)括起的字符组成。使用转义序列(如下所列)表示字符串中的特殊字符。在字符串文本中出现新行或EOF字符是编译时错误。 所有支持的转义序列如下: \b退格 \f formfeed \r回车 \n换行符 \t水平选项卡 \“双引号 \反斜杠 以下是字符串文字的有效示例: "这是一个包含制表符\t的字符串" "他问我:\

  • 我习惯于在JavaScript中这样做: 斯威夫特没有这个功能,怎么做类似的东西?

  • 问题 你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。 解决方案 strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。比如: >>> # Whitespace stripping >>> s = ' hello world \n' >>> s.strip()

  • 在Bash中是否有需要转义的字符的全面列表?是否可以只使用检查它? 并且工作正常,没有转义。是否意味着不需要转义?这是检查必要性的好方法吗? 更一般的是:在和中转义的字符是否相同?

  • 我想拆分从蓝牙获得的字符串。我正在使用 以前用分裂字符串做过。如果我在没有分隔符的情况下得到了大量的数据,应用程序就会崩溃,同时试图做不可能的事情。 如何检查是否有分隔符,然后继续拆分或跳过它?