示例:我的应用程序包含两个片段。用户操作:如何强制日期在时区更改后不更改日期?
- 在片段1用户选择日期(此日期存储为一个Date对象)
- 用户进入系统设置和更改时区
- 用户返回到应用程序,并按下按钮,在片段1(Date对象传递给fragment2并在TextView中显示)
问题:用户选择的日期和他在fragment2上看到的日期不同。例如:
- 初始时区-11
- 用户选择2015年6月1日
- 新时区+13
- 在fragment2用户看到2015年6月2日
如何使时区更改后日期不会更改?为什么会发生?
示例:我的应用程序包含两个片段。用户操作:如何强制日期在时区更改后不更改日期?
问题:用户选择的日期和他在fragment2上看到的日期不同。例如:
如何使时区更改后日期不会更改?为什么会发生?
日期是解释的问题。您可以存储包含原始时区的日期,也可以将其存储在UTC中,然后决定输出是否仍然以UTC显示或应用新的时区(可能还有DSL)。哟需要的是一致性。
日期无论系统时区如何,值始终为UTC。当您显示日期时,您可以使用DateFormat将日期转换为系统时区。
您可以注册的BroadcastReceiver android.intent.action.TIMEZONE_CHANGED意图和时区的时候改变格式化的日期。您日期对象的值保持不变,但日期格式将其格式化到新的时区
更新:从Timezone example in broadcast receiver
<receiver android:name=".TimeZoneChangedReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED " />
</intent-filter>
</receiver>
采用
例子在TimeZoneChangedReceiver
@Override
public void onReceive(final Context context, final Intent intent) {
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm");
String formattedDate = format.format(now);
mDateView.setText(formattedDate)
}
你能分享相关的代码吗? '日期'没有时区的概念;它只是一个围绕“long”值的包装(UTC以Epoch开始的毫秒数)。 –