Android 中的夏令时模式问题
DayLightSavingMode issue in Android
我知道这个问题问了很多次,但我没有从中得到解决方案。
我正在尝试将日期时间转换为 UTC-0。
我的后端是 Microsoft Sharepoint O365。
我正在共享点列表中添加记录。
我在注册时存储用户时区。所以现在每当用户登录时,他们都可以在他们选择的时区中看到在注册时存储的所有日期和时间数据。
现在我的意思是用户注册时区是 Asia/Kolkata。
现在,如果他使用伦敦等其他国家/地区的设备登录。然后他可以在注册时间选择的 Asia/Kolkata 中看到所有数据日期时间。
例如 用户在注册时注册时区,如 GMT+5:30 那么如果用户移动时区是他们在 GMT+5:30 日期时间中可以看到的任何时区
如果他从应用程序添加任何数据,那么它也会存储为 Asia/Kolkata 时区,如果他在伦敦使用移动设备,则日期时间不是当前移动设备时区。
如何解决?
我的代码如下:
public String getDateAndTimeToUserFormat()
{
String date;
TimeZone timeZone = TimeZone.getTimeZone("Indian Standard Time");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat.setTimeZone(timeZone);
date= simpleDateFormat.format(calendar.getTime());
Log.i("TAG","UserTimezone=>"+this.timeZone);
Log.i("TAG","Time zone: " + timeZone.getID());
Log.i("TAG","default time zone: " + TimeZone.getDefault());
Log.i("TAG","default time : " + Calendar.getInstance().getTime());
Log.i("TAG","UTC: " + date);
Log.i("TAG","Default: " + calendar.getTime());
return date;
}
输出:
UserTimezone=>印度标准时间
时区: GMT
默认时区: Africa/Casablanca
默认时间: Fri Jun 17 12:53:55 GMT+00:00 2016
UTC: 2016-06-17T12:53:55Z
默认值: 6 月 17 日星期五 12:53:55 GMT+00:00 2016
我终于有了符合我要求的代码。
public String getDateTimeToUTC() {
String result=convertToUTCDateTime(convertToUserDateTime(this.timeZone));
return result;
}
/**
*
* @param userTimeZone : is contain String Of User Selected TimeZone
* @return Date: it contain DateTime of UserSelected TimeZone
*/
public Date convertToUserDateTime(String userTimeZone)
{ Date parsed = null;
TimeZone timeZone = TimeZone.getTimeZone(userTimeZone);
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat.setTimeZone(timeZone);
String date = simpleDateFormat.format(calendar.getTime());
try {
parsed=simpleDateFormat.parse(date);
Log.i("TAG", "default time zone: " + TimeZone.getDefault().getID());
Log.i("TAG", "User Selected Timezone=>" + timeZone.getID());
Log.i("TAG", "default Device DateTime : " + Calendar.getInstance().getTime());
Log.i("TAG","User selected DateTime=>"+date);
} catch (ParseException e) {
e.printStackTrace();
}
return parsed ;
} /**
* @param userZoneDateTime : is contain User Selected TimeZone Date
* @return String : Return UTC-0 DateTime String From User Selected DateTimeZone
*/
public String convertToUTCDateTime(Date userZoneDateTime)
{
String result;
TimeZone timeZone1 = TimeZone.getTimeZone("UTC");
SimpleDateFormat simpleDateFormat1 =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat1.setTimeZone(timeZone1);
result = simpleDateFormat1.format(userZoneDateTime);
Log.i("TAG", "UTC Time zone: " + timeZone1.getID());
Log.i("TAG", "UTC: " + result);
return result;
}
我知道这个问题问了很多次,但我没有从中得到解决方案。
我正在尝试将日期时间转换为 UTC-0。
我的后端是 Microsoft Sharepoint O365。
我正在共享点列表中添加记录。
我在注册时存储用户时区。所以现在每当用户登录时,他们都可以在他们选择的时区中看到在注册时存储的所有日期和时间数据。
现在我的意思是用户注册时区是 Asia/Kolkata。
现在,如果他使用伦敦等其他国家/地区的设备登录。然后他可以在注册时间选择的 Asia/Kolkata 中看到所有数据日期时间。
例如 用户在注册时注册时区,如 GMT+5:30 那么如果用户移动时区是他们在 GMT+5:30 日期时间中可以看到的任何时区
如果他从应用程序添加任何数据,那么它也会存储为 Asia/Kolkata 时区,如果他在伦敦使用移动设备,则日期时间不是当前移动设备时区。
如何解决?
我的代码如下:
public String getDateAndTimeToUserFormat()
{
String date;
TimeZone timeZone = TimeZone.getTimeZone("Indian Standard Time");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat.setTimeZone(timeZone);
date= simpleDateFormat.format(calendar.getTime());
Log.i("TAG","UserTimezone=>"+this.timeZone);
Log.i("TAG","Time zone: " + timeZone.getID());
Log.i("TAG","default time zone: " + TimeZone.getDefault());
Log.i("TAG","default time : " + Calendar.getInstance().getTime());
Log.i("TAG","UTC: " + date);
Log.i("TAG","Default: " + calendar.getTime());
return date;
}
输出: UserTimezone=>印度标准时间 时区: GMT
默认时区: Africa/Casablanca
默认时间: Fri Jun 17 12:53:55 GMT+00:00 2016
UTC: 2016-06-17T12:53:55Z
默认值: 6 月 17 日星期五 12:53:55 GMT+00:00 2016
我终于有了符合我要求的代码。
public String getDateTimeToUTC() {
String result=convertToUTCDateTime(convertToUserDateTime(this.timeZone));
return result;
}
/**
*
* @param userTimeZone : is contain String Of User Selected TimeZone
* @return Date: it contain DateTime of UserSelected TimeZone
*/
public Date convertToUserDateTime(String userTimeZone)
{ Date parsed = null;
TimeZone timeZone = TimeZone.getTimeZone(userTimeZone);
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat.setTimeZone(timeZone);
String date = simpleDateFormat.format(calendar.getTime());
try {
parsed=simpleDateFormat.parse(date);
Log.i("TAG", "default time zone: " + TimeZone.getDefault().getID());
Log.i("TAG", "User Selected Timezone=>" + timeZone.getID());
Log.i("TAG", "default Device DateTime : " + Calendar.getInstance().getTime());
Log.i("TAG","User selected DateTime=>"+date);
} catch (ParseException e) {
e.printStackTrace();
}
return parsed ;
} /**
* @param userZoneDateTime : is contain User Selected TimeZone Date
* @return String : Return UTC-0 DateTime String From User Selected DateTimeZone
*/
public String convertToUTCDateTime(Date userZoneDateTime)
{
String result;
TimeZone timeZone1 = TimeZone.getTimeZone("UTC");
SimpleDateFormat simpleDateFormat1 =
new SimpleDateFormat(serverdateFormat, Locale.US);
simpleDateFormat1.setTimeZone(timeZone1);
result = simpleDateFormat1.format(userZoneDateTime);
Log.i("TAG", "UTC Time zone: " + timeZone1.getID());
Log.i("TAG", "UTC: " + result);
return result;
}