2015-05-20 47 views
0

示例:我的应用程序包含两个片段。用户操作:如何强制日期在时区更改后不更改日期?

  1. 在片段1用户选择日期(此日期存储为一个Date对象)
  2. 用户进入系统设置和更改时区
  3. 用户返回到应用程序,并按下按钮,在片段1(Date对象传递给fragment2并在TextView中显示)

问题:用户选择的日期和他在fragment2上看到的日期不同。例如:

  • 初始时区-11
  • 用户选择2015年6月1日
  • 新时区+13
  • 在fragment2用户看到2015年6月2日

如何使时区更改后日期不会更改?为什么会发生?

+0

你能分享相关的代码吗? '日期'没有时区的概念;它只是一个围绕“long”值的包装(UTC以Epoch开始的毫秒数)。 –

回答

1

日期是解释的问题。您可以存储包含原始时区的日期,也可以将其存储在UTC中,然后决定输出是否仍然以UTC显示或应用新的时区(可能还有DSL)。哟需要的是一致性。

1

日期无论系统时区如何,值始终为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) 
} 
+0

请问您可以添加一个简单的例子,如何重新设置时区更改日期?谢谢。 – BArtWell

+0

是否有可能仅将Date对象(在fragment1中)转换而不将其设置为TextView?可能会将其转换为数学? – BArtWell

+1

可能吗?是。推荐的?没有! – msh