97

SMSを送信するためのアプリケーションを開発しています。データベースから時刻を取得して、現在の時刻を保存し、送信履歴ページに表示しています。送信履歴ページにメッセージの送信時刻を表示したい。ここで、メッセージが今日、昨日、または一昨日のように送信されたことを確認したいと思います。メッセージが昨日送信された場合、そのように「昨日 20:00」を表示する必要があり、昨日送信されたメッセージでさえ「月曜日 20:00」を意味します。どうすればいいのかわからない。知ってる人いたら教えてください。

4

17 に答える 17

54

これは、android.text.format.DateFormatクラスを使用して簡単に行うことができます。このようなことを試してください。

public String getFormattedDate(Context context, long smsTimeInMilis) {
    Calendar smsTime = Calendar.getInstance();
    smsTime.setTimeInMillis(smsTimeInMilis);

    Calendar now = Calendar.getInstance();

    final String timeFormatString = "h:mm aa";
    final String dateTimeFormatString = "EEEE, MMMM d, h:mm aa";
    final long HOURS = 60 * 60 * 60;
    if (now.get(Calendar.DATE) == smsTime.get(Calendar.DATE) ) {
        return "Today " + DateFormat.format(timeFormatString, smsTime);
    } else if (now.get(Calendar.DATE) - smsTime.get(Calendar.DATE) == 1  ){
        return "Yesterday " + DateFormat.format(timeFormatString, smsTime);
    } else if (now.get(Calendar.YEAR) == smsTime.get(Calendar.YEAR)) {
        return DateFormat.format(dateTimeFormatString, smsTime).toString();
    } else {
        return DateFormat.format("MMMM dd yyyy, h:mm aa", smsTime).toString();
    }
}

詳細については、 http://developer.android.com/reference/java/text/DateFormat.htmlを確認してください。

于 2012-10-11T04:22:20.780 に答える
22

今日はAndroid APIDateUtils.isTodayから使用できます。

昨日は、そのコードを使用できます。

public static boolean isYesterday(long date) {
    Calendar now = Calendar.getInstance();
    Calendar cdate = Calendar.getInstance();
    cdate.setTimeInMillis(date);

    now.add(Calendar.DATE,-1);

    return now.get(Calendar.YEAR) == cdate.get(Calendar.YEAR)
        && now.get(Calendar.MONTH) == cdate.get(Calendar.MONTH)
        && now.get(Calendar.DATE) == cdate.get(Calendar.DATE);
}
于 2016-05-13T15:06:53.143 に答える
9

これを試すことができます:

Calendar mDate = Calendar.getInstance(); // just for example
if (DateUtils.isToday(mDate.getTimeInMillis())) {
  //format one way
} else {
  //format in other way
}
于 2016-01-11T17:54:23.460 に答える
5

それを行う別の方法。推奨ライブラリ ThreeTenを使用したkotlinで

  1. スリーテンを追加

    implementation 'com.jakewharton.threetenabp:threetenabp:1.1.0'
    
  2. kotlin 拡張機能を追加します。

    fun LocalDate.isYesterday(): Boolean = this.isEqual(LocalDate.now().minusDays(1L))
    
    fun LocalDate.isToday(): Boolean = this.isEqual(LocalDate.now())
    
于 2018-11-26T07:58:41.383 に答える
1
    Calendar now = Calendar.getInstance();
    long secs = (dateToCompare - now.getTime().getTime()) / 1000;
    if (secs > 0) {
        int hours = (int) secs / 3600;
        if (hours <= 24) {
            return today + "," + "a formatted day or empty";
        } else if (hours <= 48) {
            return yesterday + "," + "a formatted day or empty";
        }
    } else {
        int hours = (int) Math.abs(secs) / 3600;

        if (hours <= 24) {
            return tommorow + "," + "a formatted day or empty";
        }
    }
    return "a formatted day or empty";
于 2015-04-03T10:53:16.460 に答える
0

私はあなたに一つのことを提案することができます。SMSを送信するときは、詳細をデータベースに保存して、SMSが送信された日時を履歴ページに表示できるようにします。

于 2012-10-10T12:01:20.803 に答える
0

DateUtils.isToday()は非推奨になったため、非推奨と見なす必要がありますandroid.text.format.Time。彼らが isToday のソース コードを更新するまで、今日、昨日を検出し、夏時間への移行を処理し、非推奨のコードを使用しないソリューションはありません。これはKotlinで、today定期的に最新の状態に保つ必要があるフィールドを使用しています(例onResumeなど):

@JvmStatic
fun dateString(ctx: Context, epochTime: Long): String {
    val epochMS = 1000*epochTime
    val cal = Calendar.getInstance()
    cal.timeInMillis = epochMS
    val yearDiff = cal.get(Calendar.YEAR) - today.get(Calendar.YEAR)
    if (yearDiff == 0) {
        if (cal.get(Calendar.DAY_OF_YEAR) >= today.get(Calendar.DAY_OF_YEAR))
            return ctx.getString(R.string.today)
    }
    cal.add(Calendar.DATE, 1)
    if (cal.get(Calendar.YEAR) == today.get(Calendar.YEAR)) {
        if (cal.get(Calendar.DAY_OF_YEAR) == today.get(Calendar.DAY_OF_YEAR))
            return ctx.getString(R.string.yesterday)
    }
    val flags = if (yearDiff == 0) DateUtils.FORMAT_ABBREV_MONTH else DateUtils.FORMAT_NUMERIC_DATE
    return DateUtils.formatDateTime(ctx, epochMS, flags)
}

https://code.google.com/p/android/issues/detail?id=227694&thanks=227694&ts=1479155729を提出し、投票します

于 2016-11-14T20:46:44.487 に答える