使用今天,昨天,明天等字符串格式化日期的正确方法

Luk*_*kap 21 algorithm datetime android design-patterns

我有一个日期textview.我的textview包含一个类似2011.09.17的日期字符串.好吧,我仍然希望有这个,但我也想为今天或昨天的某些特定日期添加更多用户友好的信息.例如,如果今天是2011.09.17,我希望我的textview具有昨天的价值,而不是2011.09.16,而今天则是2011.09.17.

好吧,我已经设法做到这一点:),但是以丑陋的方式:(.我做了很多'if->而不是'这真的很丑陋以及我想要添加一些新规则,如果日期是超过一年我想把字符串放在去年左右......我真的需要添加丑陋的逻辑.

我的问题是有更好的方法吗?这有什么类似于设计模式的东西吗?建议的方法是什么?我相信很多人都遇到过这种问题

如果有一些沐浴方法比千分之一?如果不是谢谢,至少我会停止寻找沐浴者解决方案

任何建议,片段等将不胜感激

谢谢

Chr*_*vey 45

您可以getRelativeDateTimeString在DateUtils中 尝试http://developer.android.com/reference/android/text/format/DateUtils.html

  • Thnx节省我的时间! (2认同)

Ye *_*Min 10

我通常使用这个方便的java库进行相对时间格式化.Prety时间库

  • 网址打开空白页面 (3认同)

JP *_*ura 7

public class RelativeWeekday {                
    private final Calendar mCalendar;                

    public RelativeWeekday(Calendar calendar) {                
        mCalendar = calendar;                
    }                

    @Override                
    public String toString() {                
        Calendar today = Calendar.getInstance(Locale.getDefault());
        int dayOfYear = mCalendar.get(Calendar.DAY_OF_YEAR);
        if (Math.abs(dayOfYear - today.get(Calendar.DAY_OF_YEAR)) < 2) {
            return getRelativeDay(today);
        }              

        return getWeekDay();                
    }                

    private String getRelativeDay(Calendar today) {                
        return DateUtils.getRelativeTimeSpanString(                
                mCalendar.getTimeInMillis(),                
                today.getTimeInMillis(),                
                DateUtils.DAY_IN_MILLIS,                
                DateUtils.FORMAT_SHOW_WEEKDAY).toString();                
    }                

    private String getWeekDay() {                
        SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE");                
        return dayFormat.format(mCalendar.getTimeInMillis());                
    }                
}
Run Code Online (Sandbox Code Playgroud)