我正在尝试制作足球比分直播应用。我需要将用户的比赛时间显示为当地的比赛时间 如果我从给定时区生成了一个时间戳,那么就说它是
autodatetime(1517009400,6.5); //original timezone included
//I can make it done in javascript by https://www.autodatetime.com/
但我试图通过此代码从Android获取它
public String getconvertedtime(long timestamp) {
try{
Toast.makeText(getApplicationContext(),Integer.toString(TimeZone.getDefault().getDSTSavings()),Toast.LENGTH_LONG).show();
Calendar calendar = Calendar.getInstance();
TimeZone tz = TimeZone.getDefault();
//getTimezonedifference() return 0 for me
timestamp= timestamp-getTimezonedifference();
calendar.setTimeInMillis(timestamp * 1000);
calendar.add(Calendar.MILLISECOND, (tz.getOffset(calendar.getTimeInMillis())-tz.getDSTSavings()));
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa");
Date currentTimeZone = calendar.getTime();
return dateFormat.format(currentTimeZone);
}catch (Exception e) {
return "";
}
}
public int getTimezonedifference() {
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
double offsetInMillis = tz.getOffset(cal.getTimeInMillis());
//String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
//offset = "GMT"+(offsetInMillis >= 0 ? "+" : "-") + offset;
offsetInMillis= Math.abs((offsetInMillis)-(6.5*3600000));
int vall=(int)offsetInMillis;
return vall;
}
不幸的是,它回到了错误的时间,我无法弄明白为什么它显示出更快的时间。
结果是 01/27/2018 12:30:00 PM
对于我的本地时区(6.5),必须 01/26/2018 11:30:00
我从谷歌上找到了一些关于不同DST问题的东西,并在Toast上从“TimeZone.getDefault()。getDSTSavings()”获得了0。
请指导我解决方案,我是android编程的新手。谢谢你的阅读。
答案 0 :(得分:1)
在1517009400
的时间段01/26/2018 23:30:00 GMT
,以用户当地时间显示此时间:
// convert to epoch milli seconds
long ts = 1517009400000l;
Date date = new Date(ts);
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
String dateStr = dateFormat.format(date);
android.util.Log.i("TEST", "dateStr: " + dateStr);
dateStr
将根据用户手机的时区进行格式化。例如,我的手机设置为Asia/Kuala_Lumpur
时区,GMT+8
,因此显示01/27/2018 07:30:00
。
要将日期字符串格式化为特定时区(例如:纽约),您可以尝试:
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String dateStr = dateFormat.format(date);
这会输出01/26/2018 18:30:00
。