我想在我的应用程序中实现当天问题功能。如果用户每天使用该功能一次,那么直到白天更改时他才能访问该功能。我可以在首次访问功能时获取,但如何查看下次的此日期时间。
如何更改日期。
提前致谢。
答案 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)
LocalDate.now( ZoneId.systemDefault() )
.isEqual( LocalDate.parse( "2018-01-23" ) )
现代方法使用Java 8及更高版本中内置的 java.time 类和最新版本的Android。对于早期的Android,请参阅下面的最后一个项目符号。
你没有定义什么&#34;一天一次意味着&#34;。我假设您指的是用户特定时区的日期。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?