Java Android:如何从服务器日期构建自日期

Java Android:如何从服务器日期构建自日期,java,android,date,Java,Android,Date,我有以下代码将服务器返回的日期字符串转换为自字符串 /** * Change date format to "since" string * */ public static String timeSince(String dateString) { Date date = stringToDate(dateString); String result = (DateUtils.getRelativeTimeSpanString(date.getTime())).toString

我有以下代码将服务器返回的日期字符串转换为自字符串

/**
* Change date format to "since" string
* */
public static String timeSince(String dateString) {
    Date date = stringToDate(dateString);
    String result = (DateUtils.getRelativeTimeSpanString(date.getTime())).toString();
    return result;
}
/**
 * Function to convert server date string to Date
 * */
public static Date stringToDate(String s){
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    try {
        return df.parse(s);
    } catch(ParseException e){
        e.printStackTrace();
    }
    return null;
}
但是,举个例子,如果我打电话
时间自(“2016-07-04T07:21:39.575Z”)我得到的结果是“2016年7月4日”,而不是像“3天前”或与现在时间相关的任何其他时间。知道为什么吗?Thx…

试试这个:

Date now = new Date();
String str = DateUtils.getRelativeDateTimeString(

     this, // Suppose you are in an activity or other Context subclass

     now.getTime(), // The time to display

     DateTimeUtils.MINUTE_IN_MILLIS, // The resolution. This will display only 
                                        // minutes (no "3 seconds ago") 


     DateTimeUtils.WEEK_IN_MILLIS, // The maximum resolution at which the time will switch 
                         // to default date instead of spans. This will not 
                         // display "3 weeks ago" but a full date instead

        0); // Eventual flags
分钟单位和年单位的其他值包括:

  • 百万分之二
  • 每分钟
  • 小时(百万分之一)
  • 以百万计的日
  • 一周
  • 年单位:百万
以毫秒为单位的任何自定义值

DateUtils.getRelativeTimeSpanString(yourContext, theEventInMillis, 
                                     DateUtils.MINUTE_IN_MILLIS, 
                                     DateUtils.FORMAT_NO_NOON);
这将格式化相对于系统当前时间的通风量。它将以分钟为单位显示更改(0分钟前、2分钟前、3小时前、1天前等),直到差异达到一周,然后只发布完整日期


我希望这对你有帮助。

好的。事实证明,DateUtils.getRelativeTimeSpanString(date.getTime())返回一个相对的持续时间(例如“昨天”或“30分钟前”),但如果持续时间大于一周,则返回一个绝对的(查看代码)日期…

文档中没有这样说。。。但这是事实。大多数安卓解决方案的另一个缺点是消息没有本地化(“3分钟前”不能用法语、西班牙语或任何其他语言)。因此,我可能会为此编写自己的库。


底线是,如果您使用英语并希望将日期显示为一周前的绝对日期,则上述代码有效。

如果使用SimpleDataFormat(“yyyy-MM-dd”)?您确定这是所调用的代码吗?@Mohammaddrezakhatamihappens@ScaryWombat当然,我肯定。我一行一行地调试,得到了上面提到的结果它不是字符串,而是CharSequencewhy-1?这是GetRelativeDateTimeStrings的一种方法和一个简单示例我不知道谁投了反对票,但这并不能回答我的问题,即“为什么我的代码不起作用”?这是一个标准示例,您可以使用它来获得解决方案。似乎您的代码需要调试,所以您应该测试我的答案并改变您的方式。祝你好运