时间戳到日期/时间

时间:2018-01-25 08:36:45

标签: android datetime

我正在尝试制作足球比分直播应用。我需要将用户的比赛时间显示为当地的比赛时间 如果我从给定时区生成了一个时间戳,那么就说它是

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编程的新手。谢谢你的阅读。

1 个答案:

答案 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