Android获取日期差异

时间:2013-02-24 08:48:51

标签: android date android-date

我想在我的应用程序中实现当天问题功能。如果用户每天使用该功能一次,那么直到白天更改时他才能访问该功能。我可以在首次访问功能时获取,但如何查看下次的此日期时间。

如何更改日期。

提前致谢。

4 个答案:

答案 0 :(得分:2)

您可以结合使用时间戳,共享偏好设置以及使用位于android.text.format.DateUtils的方法isToday(long when)

代码示例:

SharedPreferences userDetails = context.getSharedPreferences("userdetails", MODE_PRIVATE);
long sharedPreferenceTimestamp= userDetails.getLong("lastquestiontime", 0); // 0: 1/1/1970
if(!DateUtils.isToday(sharedPreferenceTimestamp)) {
   // --> show the Question HERE! <--

   // update the value of last question show!
   SharedPreferences.Editor editor = userDetails.edit();
   editor.putLong("lastquestiontime", System.currentTimeMillis()); // value to store
   editor.commit();
}

答案 1 :(得分:1)

我更喜欢使用unix时间来计算日期。 unix时间是自1970年1月1日格林威治标准时间午夜以来的毫秒数。您可以通过调用Date.getTime()方法获得此数字。

因为您需要经过的天数,所以您应该将此数字除以24 * 60 * 60 * 1000。之后,您不必再做其他任何事情只需比较两个数字。如果数字相同,则日期不会改变。

答案 2 :(得分:0)

不能使用共享首选项并添加用户名和日期作为键。然后,当您下次检索用户名时,您可以检索该用户的日期并进行比较。

答案 3 :(得分:0)

TL;博士

LocalDate.now( ZoneId.systemDefault() )
         .isEqual( LocalDate.parse( "2018-01-23" ) ) 

java.time

现代方法使用Java 8及更高版本中内置的 java.time 类和最新版本的Android。对于早期的Android,请参阅下面的最后一个项目符号。

你没有定义什么&#34;一天一次意味着&#34;。我假设您指的是用户特定时区的日期。

LocalDate

LocalDate类表示没有时间且没有时区的仅限日期的值。

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果要使用JVM的当前默认时区,请求它并作为参数传递。如果省略,则隐式应用JVM的当前默认值。最好是明确的。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

如果您需要在应用重新启动后进行跟踪,请将该日期记录为文本。使用标准ISO 8601格式YYYY-MM-DD。在解析/生成字符串时, java.time 类默认使用标准格式。

String output = today.toString() ;  // Generate string in standard ISO 8601 format.

将该字符串解析回LocalDate个对象。

LocalDate localDate = LocalDate.parse( "2018-01-23" ) ;

与今天的日期比较。

Boolean isSameDate = LocalDate.now( z ).isEqual( localDate ) ;

如果是新日期,请运行您的代码。

if( ! isSameDate ) { … }  // If not same date…

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?