如何在Android Studio上用Java显示和检查日期和时间?

如何在Android Studio上用Java显示和检查日期和时间?,java,android,datetime,time,Java,Android,Datetime,Time,我对Java和Android Studio还很陌生,我正在尝试编写一个程序,当在一天的指定时间段内按下一个按钮时,会发生一个事件(例如显示文本视图)。我目前正试图显示用户看到的时间,但代码似乎没有持续运行,只反映我上次更新应用程序的时间,而不是实时显示时间 Calendar calender = Calendar.getInstance(); System.out.println("Current time => "+calender.getTime()); SimpleDateForma

我对Java和Android Studio还很陌生,我正在尝试编写一个程序,当在一天的指定时间段内按下一个按钮时,会发生一个事件(例如显示文本视图)。我目前正试图显示用户看到的时间,但代码似乎没有持续运行,只反映我上次更新应用程序的时间,而不是实时显示时间

Calendar calender = Calendar.getInstance();
System.out.println("Current time => "+calender.getTime());
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String formattedDate = df.format(calender.getTime());
dateandtimeTextView.setText("" +formattedDate);
有没有办法让时间像普通时钟一样不断更新?

需要时间时读取时钟 当用户按下按钮时,您需要读取系统时钟,而不是在应用程序启动时一次性读取。因此,将您的调用放到
ZoneDateTime.now()
Calendar.getInstance()
,或者这意味着您正在处理按钮单击并向用户显示时间的事件处理程序中使用它

从调用中获取的日期/时间对象获取创建日期/时间的时间,并保留该时间。这可能就是你看到上次更新应用程序的时间的原因。要在按下下一个按钮时获得新时间,您需要创建一个新的日期/时间对象

java.time和ThreeTenABP 顺便说一句,
Calendar
类设计拙劣,过时已久。以下是获取当前时间的现代方法:

    DateTimeFormatter formatter = DateTimeFormatter
            .ofLocalizedDateTime(FormatStyle.MEDIUM)
            .withLocale(Locale.getDefault(Locale.Category.FORMAT));

    ZonedDateTime dateTime = ZonedDateTime.now(ZoneId.systemDefault());

    String formattedDate = dateTime.format(formatter);
    System.out.println(formattedDate);
我的代码片段的确切输出不仅取决于时间,还取决于设备的语言环境。在一个实例中,我在英语语言环境中运行时得到了以下输出:

2019年12月7日下午2:38:04

您可以一次性创建格式化程序,但每次都需要创建
dateTime
。我使用的不是
Calendar
SimpleDateFormat
而是java.time,这是现代的java日期和时间API。和你一起工作真是太好了

要检查我们是否在一天中的某个指定时间段内,请使用
dateTime.toLocalTime()
并将结果与表示该时间段开始和结束的
LocalTime
对象进行比较
LocalTime
有方法
isBefore
isAfter
。您需要其中一个或两个来进行比较

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

尝试这两行以获取当前日期和时间

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
String currentDateandTime = sdf.format(new Date());
您也可以参考此链接:

作为一个旁白,考虑扔掉那些过时的、臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友,并添加到Android项目中,以便使用<代码> java.时间>代码>,java java日期和时间API。和你一起工作真是太好了。谢谢你的贡献。您的格式模式与问题中的格式模式不同。还有其他区别吗?你真的认为这会解决问题吗,实时显示时间?问这个问题是因为我非常确信它不会。是的,我想尝试解决你的问题,但我在理解你的问题时犯了错误,非常抱歉。你使用的日期时间类非常糟糕,多年前被JSR 310中定义的现代java.time类所取代。我试着使用你提供的代码,但我仍然面临这样一个问题:每当我启动应用程序时,它都会显示它启动的时间。我希望它能像时钟一样显示时间的流逝。。我还使用了calander功能,因为与我的问题类似的旧帖子也使用了该功能,这些帖子现在肯定已经存在了一段时间。之前已经被问过很多次了。例如,见。搜索更多。