按钮只在圣诞节后工作

Bar*_*van 1 java xml android

对不起,如果这是一个菜鸟问题.

我做了一个快速的Android应用程序,赠送圣诞节的礼品卡,但我想限制人们在圣诞节后"展开"他们的礼物,有没有办法我可以禁用按钮直到午夜?

Bas*_*que 5

TL;博士

LocalDate.now( ZoneId.systemDefault() )
         .isBefore( LocalDate.of( 2016 , Month.DECEMBER , 25 ) )
Run Code Online (Sandbox Code Playgroud)

使用java.time

使用java.time类进行日期时间处理的现代方法.大部分功能都是后端移植到Android(参见下面的部分).

要确定当前日期,需要时区.对于任何给定的时刻,日期在全球范围内因地区而异.圣诞首先开始在太平洋区域,如Pacific/Auckland,在后来Asia/Kolkata,再后来在Europe/Paris,甚至后来在America/Montreal.这就解释了为什么圣诞老人将他的驯鹿从东方飞到西方.

如果重要,请询问用户预期的时区.否则,请使用JVM的当前默认区域.

ZoneId z = ZoneId.systemDefault() ;
LocalDate today = LocalDate.now( z );
Run Code Online (Sandbox Code Playgroud)

确定圣诞节.

LocalDate xmas = LocalDate.of( 2016 , Month.DECEMBER , 25 ) ;
Run Code Online (Sandbox Code Playgroud)

相比.

if( today.isBefore( xmas ) ) {
    … disable button
} else {
    … enable button 
}
Run Code Online (Sandbox Code Playgroud)

动态更新

要动态更新按钮以在时钟跳到圣诞节时启用,请运行后台线程.经常检查当前日期并与截止日期进行比较.A ScheduledExecutorService是运行这样的重复后台任务的现代方法.请注意,如果需要,您可以设置初始延迟以使您接近Xmas的开头,以减少多余检查的数量.搜索有关此主题的许多问题和答案的堆栈溢出.提示:确保在执行程序服务中运行的代码的最高级别放置一个try-catch,因为任何未捕获Exception都会导致服务静默停止.

请小心以线程安全的方式从后台线程访问GUI中的按钮.再次,针对此主题搜索Stack Overflow的许多问题和解答.


关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.