2014-10-09 37 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