2014-10-09 38 views
0
package com.example.currenttime; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class Functions { 

    private static long converTimeStringINToMillis1(String time) { 

     long milliseconds = 0; 

     try { 
      SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); 
      sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 

      // 25/06/2014 8:41:26 

      Date date; 

      date = sdf.parse(time); 
      milliseconds = date.getTime(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      milliseconds = 0; 
      e.printStackTrace(); 
     } 

     return milliseconds; 
    } 

    public static String setLastSeenTime1(String time) { 

     long milliseconds = Math.abs(System.currentTimeMillis() 
       - converTimeStringINToMillis1(time)); 
     String lastSeen = ""; 

     int seconds = (int) milliseconds/1000; 
     if (seconds < 60) 
      lastSeen = String.valueOf(seconds) + "sec ago"; 
     else if (seconds > 60 && seconds < 3600) 
      lastSeen = String.valueOf((int) seconds/60) + " min ago"; 
     else if (seconds > 3600 && seconds < 86400) 
      lastSeen = String.valueOf((int) seconds/3600) + " hours ago"; 
     else if (seconds > 86400 && seconds < 172800) 
      lastSeen = " Yesterday"; 
     else if (seconds > 172800 && seconds < 2592000) 
      lastSeen = String.valueOf((int) (seconds/(24 * 3600))) 
        + " days ago"; 
     else if (seconds > 2592000) 
      lastSeen = String.valueOf((int) (seconds/(30 * 24 * 3600))) 
        + " months ago"; 

     return lastSeen; 

    } 

} 

我有顯示逆時我調用這個函數使用這個Android的代碼:如何從美國時間獲取反向時間的Android

btn_retry.setText(Functions.setLastSeenTime1("09/10/2014 8:41:26 AM")) 

但問題是,我得到它位於服務器時間我們必須根據當地時間ZOne顯示,以便我可以看到推出尊敬的時間,請建議我如何做我的錯在哪裏請幫助。

+1

它似乎是將世界協調時間設置爲時區...所以你可以詳細說明你正在尋找哪個時區。 – Toppers 2014-10-09 11:38:05

+0

UTC我想包括 – Edge 2014-10-09 11:40:00

+0

轉換時間Utc和手段設備時間和服務器時間的基礎上,我們必須找到差異,我們必須顯示在文本視圖 – Edge 2014-10-09 11:41:23

回答

1

更新: 這應該工作,只需在您的實用程序類中替換它,您只需傳遞時間和serverTimeZone。

public static String setLastSeenTime1(String time, TimeZone serverTimeZone) throws ParseException { 

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); 
    sdf.setTimeZone(serverTimeZone); 

    SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); 
    sdf.setTimeZone(TimeZone.getDefault()); 

    return sdf2.format(sdf.parse(time)); 

} 
+0

我已經嘗試過我收到負值 – Edge 2014-10-09 11:41:59

+0

更新了答案 - 添加了一些代碼。差異可能是負面的。您只需通過差異「糾正」服務器時間即可獲得本地時間。 – 2014-10-09 12:02:34

+0

請添加我的代碼duede coz無法操作此代碼 – Edge 2014-10-09 12:13:06

1
在converTimeStringINToMillis1

使用這樣

 Date date = new Date(); 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

    // Use UTC time zone to format the date in 
    df.setTimeZone(TimeZone.getTimeZone("UTC")); 

    System.out.println("Date and time in UTC: " + df.format(date)); 
+0

我能夠做到這一點,但我將如何轉換設備時間在UTC基本上我必須找到 – Edge 2014-10-09 12:25:28

+0

這將返回UTC時間只有.....你可以詳細說明一下,或者你可以舉一個小例子。 – Toppers 2014-10-09 12:32:42

0

喬達時間

而不是推出自己動手,只需使用Joda-Time庫。 Joda-Time適用於Android。

下面的示例代碼使用Joda-Time 2.4。

Joda-Time使用ISO 8601標準字符串格式作爲解析和生成字符串輸出的默認值。見DateTime,間隔和句點字符串。

解析輸入字符串。請注意我們如何指定時區和Locale(以英文解析「AM」值)。

String input = "09/10/2014 8:41:26 AM"; 
DateTimeFormatter formatterInput = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss a").withZoneUTC().withLocale(Locale.ENGLISH); 
DateTime then = formatterInput.parseDateTime(input); 

獲取當前時刻。從那時起用這個時刻建立一個Interval

DateTime now = DateTime.now(DateTimeZone.UTC); 
Interval interval = new Interval(then , now); 

轉換的時間間隔爲一個Period,時間跨度定義爲天數,小時數,並且這樣的。

Period period = interval.toPeriod(); 

生成期間的文本表示形式。這個例子訪問一個默認的句柄格式化程序。相反,您可以通過PeriodFormatterBuilder類來構建自己的自定義格式化程序。

PeriodFormatter formatterOutput = PeriodFormat.wordBased(Locale.US); 
String output = formatterOutput.print(period); 

爲了好玩,顯示不同的語言。任意選擇魁北克風格。

String outputQuébécois = PeriodFormat.wordBased(Locale.CANADA_FRENCH).print(period); 

轉儲到控制檯。

System.out.println("input: " + input); 
System.out.println("then: " + then); 
System.out.println("now: " + now); 
System.out.println("interval: " + interval); 
System.out.println("period: " + period); 
System.out.println("output: " + output); 
System.out.println("outputQuébécois: " + outputQuébécois); 

運行時。

input: 09/10/2014 8:41:26 AM 
then: 2014-09-10T08:41:26.000Z 
now: 2014-10-09T20:44:23.470Z 
interval: 2014-09-10T08:41:26.000Z/2014-10-09T20:44:23.470Z 
period: P4W1DT12H2M57.470S 
output: 4 weeks, 1 day, 12 hours, 2 minutes, 57 seconds and 470 milliseconds 
outputQuébécois: 4 semaines, 1 jour, 12 heures, 2 minutes, 57 secondes et 470 millisecondes