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代码:
btn_retry.setText(Functions.setLastSeenTime1("09/10/2014 8:41:26 AM"))
但问题是我正在获取位于Us的服务器时间我必须根据当地时间ZOne显示以便我可以看到弹出尊敬时间请建议我如何做错在哪里做错了请帮助。
答案 0 :(得分: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));
}
答案 1 :(得分:1)
就像这样使用
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));
答案 2 :(得分:0)
只需使用Joda-Time库,而不是自己滚动。 Joda-Time适用于Android。
下面的示例代码使用Joda-Time 2.4。
Joda-Time使用ISO 8601标准字符串格式作为解析和生成字符串输出的默认值。在DateTime,Interval和Period字符串中可以看到这里。
解析输入字符串。请注意我们如何指定时区和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();
生成Period的文本表示。此示例访问默认句点格式化程序。相反,您可以通过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