簡體   English   中英

在Android的兩個日期之間獲得差異

[英]Getting difference between two dates Android

我有字符串發布日期,如:

2011-03-27T09:39:01.607

並且有當前日期。

我希望以下列形式區分這兩個日期:

2 days ago 
1 minute ago etc..

取決於發布日期。

我使用此代碼將發布日期轉換為毫秒:

public long Date_to_MilliSeconds(int day, int month, int year, int hour, int minute) {
    Calendar c = Calendar.getInstance();
    c.set(year, month, day, hour, minute, 00);
    return c.getTimeInMillis();
}

這個當前日期: long now = System.currentTimeMillis();

並計算差異:

String difference = (String) DateUtils.getRelativeTimeSpanString(time,now, 0);

但它像May 1 , 1970那樣回歸......

如何區分過帳日期和當前日期。

您可以使用getRelativeTimeSpanString() 它返回一個像“1分鍾前”的字符串。 這是一個真實的簡單示例,說明應用程序運行了多長時間。

private long mStartTime;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mStartTime = System.currentTimeMillis();
}

public void handleHowLongClick(View v) {
    CharSequence cs = DateUtils.getRelativeTimeSpanString(mStartTime);
    Toast.makeText(this, cs, Toast.LENGTH_LONG).show();
}

將兩個日期轉換為日歷並將時間設為0(

today.set(Calendar.HOUR_OF_DAY, 0);
    today.set(Calendar.MINUTE, 0);
    today.set(Calendar.SECOND, 0);

)。
然后使用這個樂趣:

public final static long SECOND_MILLIS = 1000;
public final static long MINUTE_MILLIS = SECOND_MILLIS*60;
public final static long HOUR_MILLIS = MINUTE_MILLIS*60;
public final static long DAY_MILLIS = HOUR_MILLIS*24;

 public static int daysDiff( Date earlierDate, Date laterDate )
    {
        if( earlierDate == null || laterDate == null ) return 0;
        return (int)((laterDate.getTime()/DAY_MILLIS) - (earlierDate.getTime()/DAY_MILLIS));
    }

嘗試我在我的一個應用程序中使用的以下方法:

/**
 * Returns difference between time and current time as string like:
 * "23 mins ago" relative to current time.
 * @param time - The time to compare with current time in yyyy-MM-dd HH:mm:ss format
 * @param currentTime - Present time in yyyy-MM-dd HH:mm:ss format
 * @return String - The time difference as relative text(e.g. 23 mins ago)
 * @throws ParseException
 */
private String getTimeDiff(String time, String currentTime) throws ParseException
{
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date currentDate = (Date)formatter.parse(currentTime);
    Date oldDate = (Date)formatter.parse(time);
    long oldMillis = oldDate.getTime();
    long currentMillis = currentDate.getTime();
    return DateUtils.getRelativeTimeSpanString(oldMillis, currentMillis, 0).toString();
}

實現這個的簡單方法:

  1. 在您的項目中導入joda庫。

  2. 將您當前的日期和未來日期存儲在這樣的變量中

     //here currenDate and futureDate are of calendar type. LocalDateTime currentDateTime = LocalDateTime.fromCalendarFields(currentDate); LocalDateTime futureDateTime = LocalDateTime.fromCalendarFields(futureDate); 
  3. 現在你要做的是計算兩個日期之間的差異並保存差異,這個差異將用於從下一個字段中減去。

    例如:我們必須顯示年,月,周......等等。 在計算兩個日期之間的年份之后,我們將減去月份的年份數量,並且類似地用於下一個字段...日期時間的層次結構如下...

    年,月,周,日,小時,分鍾,秒

    現在的片段

     /** * * @param context which activity its calling * @param currentDateTime current time * @param futureDateTime future time from which we have to calculate difference * @param selectedUnitsFromSettings which units we have to find difference such as years,weeks....etc * which will be stored in list... * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static HashMap dateBasedOnUnitCalculator( Context ctx, LocalDateTime currentDateTime, LocalDateTime futureDateTime, List<String> selectedUnitsFromSettings) { //to store the dates Date currentTime = currentDateTime.toDateTime().toDate(); Date futureTime = futureDateTime.toDateTime().toDate(); //to store the units String currentUnit = ""; String prevUnit = ""; //to store the value which you want to remove int prevValue = 0; //to store the calculated values in hashmap HashMap units = new HashMap(); for(int i = 0; i < selectedUnitsFromSettings.size(); i++){ //to store the current unit for calculation of future date currentUnit = selectedUnitsFromSettings.get(i); //to remove higher unit from new future date we will use prevUnit if(i > 0){ prevUnit = selectedUnitsFromSettings.get(i-1); futureTime = getDateForPreviousUnit(futureTime,prevUnit,prevValue); } //now calculate the difference if(currentUnit.equals("Year")){ Years q = Years.yearsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int years = q.getYears(); prevValue = years; units.put("Year", prevValue); }else if(currentUnit.equals("Month")){ Months w = Months.monthsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int months = w.getMonths(); prevValue = months; units.put("Month", prevValue); }else if(currentUnit.equals("Week")){ Weeks e = Weeks.weeksBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int weeks = e.getWeeks(); prevValue = weeks; units.put("Week", prevValue); }else if(currentUnit.equals("Day")){ Days r = Days.daysBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int days = r.getDays(); prevValue = days; units.put("Day", prevValue); }else if(currentUnit.equals("Hour")){ Hours a = Hours.hoursBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int hours = a.getHours(); prevValue = hours; units.put("Hour", prevValue); }else if(currentUnit.equals("Minute")){ Minutes s = Minutes.minutesBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int minutes = s.getMinutes(); prevValue = minutes; units.put("Minute", prevValue); }else if(currentUnit.equals("Second")){ Seconds d = Seconds.secondsBetween(new DateTime(currentTime.getTime()), new DateTime(futureTime.getTime())); int seconds = d.getSeconds(); prevValue = seconds; units.put("Second", prevValue); } } return units; } 

    計算前一單位的未來時間

     /** * * @param futureTime the future date which will be modified * @param prevString which unit value to be reduced * @param prevValue how much to reduce from the current unit * @return */ private static Date getDateForPreviousUnit(Date futureTime, String prevString, int prevValue) { Date calculatedDate = futureTime; Constants.showLog(TAG, "prev string is "+prevString); if(prevString.equals("Year")){ calculatedDate = new DateTime(futureTime).minusYears(prevValue).toDate(); }else if(prevString.equals("Month")){ calculatedDate = new DateTime(futureTime).minusMonths(prevValue).toDate(); }else if(prevString.equals("Week")){ calculatedDate = new DateTime(futureTime).minusWeeks(prevValue).toDate(); }else if(prevString.equals("Day")){ calculatedDate = new DateTime(futureTime).minusDays(prevValue).toDate(); }else if(prevString.equals("Hour")){ calculatedDate = new DateTime(futureTime).minusHours(prevValue).toDate(); }else if(prevString.equals("Minute")){ calculatedDate = new DateTime(futureTime).minusMinutes(prevValue).toDate(); }else if(prevString.equals("Second")){ calculatedDate = new DateTime(futureTime).minusSeconds(prevValue).toDate(); } return calculatedDate; } 
  4. 現在來自任何活動的電話使用此

     HashTable hashTable = dateBasedOnUnitCalculator(this, currentDateTime, futureDateTime, selectedUnitsFromSettings); //to display the values from hashtable showLog(TAG, " year "+hashTable.get("Year") + " month "+hashTable.get("Month") + " week "+hashTable.get("Week") + " day "+hashTable.get("Day") + " hours "+hashTable.get("Hour") + " min " +hashTable.get("Minute") + " sec " +hashTable.get("Second") + " "); 
  5. selectedunitsfromsettings將擁有您想要的任何單位。

您可以在不使用任何庫的情況下找到兩個日期之間的差

你只需要找出這樣的日期之間的差異:

    long diff = currentdate.getTime() - temp_date.getTime();
                    //current date            //other date

通過這個你將得到毫秒的差異..現在你可以根據你的需要格式化,即在幾小時前或幾個月前或幾年前格式,只需使用if條件

點擊此處查看完整示例..

希望能幫助到你..!

你得到1970年的原因是因為它是以毫秒為單位的紀元日期。 要獲得實際差異,請使用以下內容。

使用JodaTime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM