35

Android アプリで機能を作成して、任意の日付 (過去、現在、または未来) を取得し、現在との差を見つけます。

mynowduevariables はどちらもlongsで、これが私のコードです:

long now = System.currentTimeMillis();
long due = now + 864000;

Log.d("Time in 1 day", DateUtils.getRelativeTimeSpanString(due,now, DateUtils.DAY_IN_MILLIS));

yesterday出力を、todayin 4 daysまたはのようにしたい19/12/2012。ただし、現在の出力はin 0 days...

これらの日付文字列に時刻を表示したくありません。

Androidで日付をフォーマットするための最良の方法は何ですか?

4

10 に答える 10

32

私が考えていることは次のように変化しています。

DateUtils.getRelativeTimeSpanString(due, now, 0L, DateUtils.FORMAT_ABBREV_ALL);

ドキュメントには、現在からの相対時間を返すと記載されているためです。

それでもうまくいかない場合は、いくつかの優れたライブラリを使用してください。

城田時間

プリティタイム

時間前

于 2013-08-09T12:33:33.040 に答える
9

最後に、私はあなたが望んでいたものを実装しました..!

まず、ここから Joda Timeをダウンロードする必要があります

任意のフォルダーに展開し、 joda-time-2.2.jarを androidProject/libs フォルダーに配置します。

主な活動

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
import org.joda.time.MutableDateTime;
import org.joda.time.Weeks;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;


public class MainActivity extends Activity
{
  private int day ;
  private int month ;
  private int year ;
  private int hour ;
  private int minute ;
  private long selectedTimeInMillis;
  private long currentTimeInMillis;
  private String strDay ="";

 @Override
 protected void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    year = 2013;
    month = 8;
    day = 10;
    hour = 15;
    minute = 28;

    DateTime selectedTime = new DateTime(year,month,day,hour,minute);
    selectedTimeInMillis = selectedTime.getMillis();

    MutableDateTime epoch = new MutableDateTime();
    epoch.setDate(selectedTimeInMillis); //Set to Epoch time

    DateTime now = new DateTime();

    currentTimeInMillis = now.getMillis();

    int days = Days.daysBetween(epoch, now).getDays();
    int weeks = Weeks.weeksBetween(epoch, now).getWeeks();
    int months = Months.monthsBetween(epoch, now).getMonths();

    Log.v("days since epoch: ",""+days);
    Log.v("weeks since epoch: ",""+weeks);
    Log.v("months since epoch: ",""+months);


    if(selectedTimeInMillis < currentTimeInMillis) //Past 
    {       
        long yesterdayTimeInMillis = currentTimeInMillis - 86400000;

        DateTime today = new DateTime(currentTimeInMillis);
        int year = today.getDayOfYear();
        int intToday = today.getDayOfMonth();
        DateTime yesterday = new DateTime(yesterdayTimeInMillis);
        int intYesterday = yesterday.getDayOfMonth();
        DateTime selectedDay = new DateTime(selectedTimeInMillis);
        int intselectedDay = selectedDay.getDayOfMonth();
        int intselectedYear = selectedDay.getDayOfYear();

        if(intToday == intselectedDay & year == intselectedYear)
        {
            strDay = "today";
        }
        else if(intYesterday == intselectedDay)
        {
            strDay = "yesterday";
        }
        else
        {
            strDay = "before "+ days +" days from today";
        }


    }
    else if(selectedTimeInMillis > currentTimeInMillis) //Future
    {
        long tomorrowTimeInMillis = currentTimeInMillis + 86400000;

        DateTime tomorrow = new DateTime(tomorrowTimeInMillis);
        int intTomorrow = tomorrow.getDayOfMonth();
        DateTime today = new DateTime(selectedTimeInMillis);
        int intToday = today.getDayOfMonth();

        if(intToday == intTomorrow)
        {
            strDay = "tomorrow";
        }
        else
        {
            days = -days;
            strDay = "after "+ days +" days from today";
        }


    }

    Log.v("strDay: ",""+strDay);
  }
}

day の値を変更するだけで、望ましい出力が得られます。現在、日付 10 を入力として指定しているため、出力は今日になります。

日付/日 = 10月 = 8年 = 2013時間 = 15分 = 28を設定しました

過去の日付の場合:

input day 9 output yesterday

input day 3 output before 7 days from today

input year 2012 and day 10 output before 365 days from today

将来の日付:

input day 11 output tomorrow

input day 27 output after 17 days from today

input day 23 and year 2016 output after 1109 days from today
于 2013-08-10T11:32:20.523 に答える
4

Android で現在を基準とした日付をフォーマットする最良の方法

使用することをお勧めしますJodaTime

これは軽量で便利なライブラリであり、実際に Date インスタンスを操作するための最良のツールだと思います。

ここから始めることができます。

于 2013-08-09T12:30:24.627 に答える
-1

Android の場合、 Joda-Time-Androidライブラリで最も簡単な方法を使用できます。

Date yourTime = new Date();
DateTime dateTime = new DateTime(yourTime); //or simple DateTime.now()
final String result = DateUtils.getRelativeTimeSpanString(getContext(), dateTime);
于 2015-02-11T13:09:53.247 に答える
-1

したがって、計算はミリ秒単位に基づいており、SimpleDateFormat で結果をフォーマットします。

このために、次のように SimpleDateFormat フォーマッタを簡単に使用できます。

Date date = new Date(milliseconds);
SimpleDateFormat formatter = new SimpleDateFormat("EEEE dd MMMM yyyy");
String strDate = formatter.format(date);

したがって、計算はミリ秒単位に基づいている必要があり、結果を SimpleDateFormat でフォーマットします。

パターン ("EEEE dd MMMM yyyy") を使用すると、2013 年 2 月 4 日月曜日のような日付形式を取得できます。

好きなようにパターンを変更できます: "EEEE dd/MM/yy", ...

于 2013-02-04T15:29:53.113 に答える