Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中以自定义格式显示相对日期_Java_Android_Android Dateutils - Fatal编程技术网

Java 在Android中以自定义格式显示相对日期

Java 在Android中以自定义格式显示相对日期,java,android,android-dateutils,Java,Android,Android Dateutils,我想把日期翻译成可读的格式。我正在使用,但这不符合标准。我得到的输出看起来像:1小时,15分钟前,等等 我想知道是否可以将格式更改为: 3m而不是3分钟前的 1小时而不是1小时。15分钟前等 使用DateUtils还是有其他方法可以做到这一点 更确切地说,我正在寻找一个类似的Android版本,您可以轻松地更改相对日期的格式(例如:{{minutes}}minutes ago到{{minutes}}m) 为了让自己明白,我不是在寻找一种格式化日期的方法,而是将日期转换为人类可读的格式,如“今天”

我想把日期翻译成可读的格式。我正在使用,但这不符合标准。我得到的输出看起来像:1小时,15分钟前,等等

我想知道是否可以将格式更改为:

3m而不是3分钟前的

1小时而不是1小时。15分钟前

使用DateUtils还是有其他方法可以做到这一点

更确切地说,我正在寻找一个类似的Android版本,您可以轻松地更改相对日期的格式(例如:
{{minutes}}minutes ago
{{minutes}}m


为了让自己明白,我不是在寻找一种格式化日期的方法,而是将日期转换为人类可读的格式,如“今天”、“1小时”、“38分钟”(类似于facebook的相对日期)。

为什么不将日期解析为您想要的格式

使用string.replace()可以在一行代码中完成

编辑1:我通常这样使用SimpleDataForma,希望它能帮助:

SimpleDateFormat sdf=新的SimpleDateFormat(“yyyy-MM-dd”);
字符串currentDateandTime=sdf.format(new Date());

您将需要此导入(我认为Android会自动导入):

编辑2:在您的示例中,您必须做的是:

SimpleDataFormat sdf=新的SimpleDataFormat(“HH'h'mm'm'”);
字符串currentDateandTime=sdf.format(new Date());
System.out.println(“今天在dd-MM-yy:HH:MM:SS:+date);

您应该使用并指定所需的模板。在您的情况下,该模板如下所示:

String template = "H'h', m'm'";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(template, Locale.getDefault());
String formatted = simpleDateFormat.format(new Date());
使用API级别3中包含的内置实用程序库

 CharSequence getRelativeDateTimeString (Context c, 
             long time, 
             long minResolution, 
             long transitionResolution, 
             int flags) Return string describing the elapsed time since startTime formatted like "[relative time/date], [time]".
美国日期格式的输出字符串示例:

3分钟前,昨天上午10:15,12月12日下午12:20,2007年11月14日上午4:12, 上午8:20


经过一些研究,我发现了一些库,比如

但是,我决定不使用库并重写它的文本资源,而是创建一个方法并将文本存储在strings.xml中,以备将来可能的本地化

    private static final int SECOND_MILLIS = 1000;
    private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
    private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
    private static final int DAY_MILLIS = 24 * HOUR_MILLIS;
    private static final int WEEK_MILLIS = 7 * DAY_MILLIS;

    public static String getTimeAgo(Date date, Context context) {
        Date now = Calendar.getInstance().getTime();
        final long diff = now.getTime() - date.getTime();

        if (diff < SECOND_MILLIS) {
            return context.getString(R.string.just_now);
        } else if (diff < MINUTE_MILLIS) {
            return diff / SECOND_MILLIS + context.getString(R.string.seconds_ago);
        } else if (diff < 2 * MINUTE_MILLIS) {
            return context.getString(R.string.a_minute_ago);
        } else if (diff < 59 * MINUTE_MILLIS) {
            return diff / MINUTE_MILLIS + context.getString(R.string.minutes_ago);
        } else if (diff < 90 * MINUTE_MILLIS) {
            return context.getString(R.string.an_hour_ago);
        } else if (diff < 24 * HOUR_MILLIS) {
            return diff / HOUR_MILLIS + context.getString(R.string.hours_ago);
        } else if (diff < 48 * HOUR_MILLIS) {
            return context.getString(R.string.yesterday);
        } else if (diff < 6 * DAY_MILLIS) {
            return diff / DAY_MILLIS + context.getString(R.string.days_ago);
        } else if (diff < 11 * DAY_MILLIS) {
            return context.getString(R.string.a_week_ago);
        } else {
            return diff / WEEK_MILLIS + context.getString(R.string.weeks_ago);
        }
    }
private static final int SECOND\u MILLIS=1000;
专用静态最终整数分钟=60*秒;
专用静态最终整数小时=60*分钟;
私人静态最终整数天=24*小时;
私人静态最终整数周=7*天;
公共静态字符串getTimeAgo(日期、上下文){
现在日期=Calendar.getInstance().getTime();
final long diff=now.getTime()-date.getTime();
中频(差<秒/毫秒){
返回context.getString(R.string.just_now);
}否则如果(差值<分钟\毫秒){
返回diff/SECOND\u MILLIS+context.getString(R.string.seconds\u ago);
}否则如果(差值<2*分钟\u毫秒){
返回context.getString(R.string.a_分钟前);
}否则如果(差值<59*分钟_毫秒){
返回diff/MINUTE\u MILLIS+context.getString(R.string.minutes\u ago);
}否则如果(差值<90*分钟_毫秒){
返回context.getString(一小时前的R.string);
}否则如果(差值<24*小时_毫秒){
返回diff/HOUR\u MILLIS+context.getString(R.string.hours\u ago);
}否则如果(差值<48*小时_毫秒){
返回context.getString(R.string.dayed);
}否则,如果(差值<6*天_毫秒){
返回diff/DAY\u MILLIS+context.getString(R.string.days\u ago);
}否则如果(差值<11*天_毫秒){
返回context.getString(R.string.a_周前);
}否则{
返回diff/WEEK\u MILLIS+context.getString(R.string.weeks\u ago);
}
}

如何将Date对象解析为3分钟前还是1小时前?这不是一行代码。我是在问是否有用于此的库或util。OP不想格式化类型为
java.util.Date
的对象,而是这种类型的两个对象之间的增量,即持续时间。这是一个很大的区别。Meno Hochschild,没错!它是s称为相对日期或相对时间。关于“编辑-2”中建议的解决方案,有两个事实:
SimpleDataFormat
未设计或不适合打印持续时间=>a)无法处理字段溢出(例如:25小时),b)受到奇怪的时区影响。我的图书馆提供了大约85种语言和不同文本宽度的课程。
    private static final int SECOND_MILLIS = 1000;
    private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
    private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
    private static final int DAY_MILLIS = 24 * HOUR_MILLIS;
    private static final int WEEK_MILLIS = 7 * DAY_MILLIS;

    public static String getTimeAgo(Date date, Context context) {
        Date now = Calendar.getInstance().getTime();
        final long diff = now.getTime() - date.getTime();

        if (diff < SECOND_MILLIS) {
            return context.getString(R.string.just_now);
        } else if (diff < MINUTE_MILLIS) {
            return diff / SECOND_MILLIS + context.getString(R.string.seconds_ago);
        } else if (diff < 2 * MINUTE_MILLIS) {
            return context.getString(R.string.a_minute_ago);
        } else if (diff < 59 * MINUTE_MILLIS) {
            return diff / MINUTE_MILLIS + context.getString(R.string.minutes_ago);
        } else if (diff < 90 * MINUTE_MILLIS) {
            return context.getString(R.string.an_hour_ago);
        } else if (diff < 24 * HOUR_MILLIS) {
            return diff / HOUR_MILLIS + context.getString(R.string.hours_ago);
        } else if (diff < 48 * HOUR_MILLIS) {
            return context.getString(R.string.yesterday);
        } else if (diff < 6 * DAY_MILLIS) {
            return diff / DAY_MILLIS + context.getString(R.string.days_ago);
        } else if (diff < 11 * DAY_MILLIS) {
            return context.getString(R.string.a_week_ago);
        } else {
            return diff / WEEK_MILLIS + context.getString(R.string.weeks_ago);
        }
    }