I am trying to make a football Livescore app. And I need to show the match time to users as their local match time.
if I was generated a Timestamp from a given timezone, lets say it is
autodatetime(1517009400,6.5); //original timezone included
//I can make it done in javascript by https://www.autodatetime.com/
But I was trying to get it from Android with this code
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;
}
Unfortunately It was returning wrong time, I can't figure it out why it was showing faster hours .
The result is 01/27/2018 12:30:00 PM
It must be 01/26/2018 11:30:00 PM for my Local TimeZone(6.5)
And I found something about different DST problems from googling and get 0 from "TimeZone.getDefault().getDSTSavings()" on Toast.
Please guide me to the solution, I am new to android programming. Thank you for reading.