【问题标题】:Java: getMinutes and getHoursJava:getMinutes 和 getHours
【发布时间】:2010-10-28 18:36:15
【问题描述】:

自从Date.getHoursDate.getMinutes 被弃用后,您如何获得小时和分钟?我在 Google 搜索中找到的示例使用了已弃用的方法。

【问题讨论】:

标签: java date time


【解决方案1】:
  • 从日期变量(yourdate)获取小时:
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(yourdate);
    int hours = calendar.get(Calendar.HOUR_OF_DAY);
    int minutes = calendar.get(Calendar.MINUTE);
    int seconds = calendar.get(Calendar.SECOND);

【讨论】:

    【解决方案2】:

    tl;博士

    ZonedDateTime.now().getHour()
    

    ……或……

    LocalTime.now().getHour() 
    

    ZonedDateTime

    Answer by J.D. 很好,但不是最佳的。该答案使用LocalDateTime 类。缺少任何时区或与 UTC 偏移的概念,该类不能代表一个时刻。

    最好使用ZonedDateTime

    ZoneId z = ZoneID.of( "America/Montreal" ) ;
    ZonedDateTime zdt = ZonedDateTime.now( z ) ;
    

    指定时区

    如果您省略 ZoneId 参数,则会在运行时使用 JVM 的当前默认时区隐式应用一个。

    所以:

    ZonedDateTime.now()
    

    …与此相同:

    ZonedDateTime.now( ZoneId.systemDefault() )
    

    最好是明确的,通过您想要/预期的时区。运行时默认可以change at any moment

    如果关键,请与用户确认时区。

    小时-分钟

    询问ZonedDateTime 的小时和分钟。

    int hour = zdt.getHour() ;
    int minute = zdt.getMinute() ;
    

    LocalTime

    如果您只需要没有时区的时间,请提取 LocalTime

    LocalTime lt = zdt.toLocalTime() ;
    

    或者完全跳过ZonedDateTime,直接转到LocalTime

    LocalTime lt = LocalTime.now( z ) ;  // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
    

    java.time 类型


    关于java.time

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

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

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

    您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

    【讨论】:

      【解决方案3】:

      另一种获取分钟和小时的方法是使用 SimpleDateFormat。

      SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
      String getMinutes = formatMinutes.format(new Date())
      
      SimpleDateFormat formatHours = new SimpleDateFormat("HH")
      String getHours = formatHours.format(new Date())
      

      【讨论】:

      【解决方案4】:
      public static LocalTime time() {
          LocalTime ldt = java.time.LocalTime.now();
      
          ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
          System.out.println(ldt);
          return ldt;
      }
      

      这对我有用

      【讨论】:

        【解决方案5】:
        int hr=Time.valueOf(LocalTime.now()).getHours();
        int minutes=Time.valueOf(LocalTime.now()).getMinutes();
        

        这些函数将以小时和分钟为单位返回 int 值。

        【讨论】:

        • 重复。这种方法已经在Answer by J.D. 中介绍过。
        • 那是java.sql.Time吗?当你有java.time.LocalTime 时,当然没有理由让那个过时的课程发挥作用。你太复杂了。
        • 看起来getMinutes() 已被弃用(我使用的是java 1.8)并已被Calendar.get(Calendar.MINUTE) 取代
        【解决方案6】:

        java.time

        虽然我是Joda-Time 的粉丝,但Java 8 引入了java.time 包,它终于成为一个值得的Java 标准解决方案!阅读这篇文章,Java SE 8 Date and Time,了解关于 java.time 的大量信息(不包括小时和分钟)。

        特别是查看LocalDateTime 类。

        小时和分钟:

        LocalDateTime.now().getHour();
        LocalDateTime.now().getMinute();
        

        【讨论】:

        • 这是最好的答案。您可能需要提供明确的时区以提醒读者和您自己这是一个时区敏感操作:LocalDateTime.now(ZoneId.of("Asia/Manilla"))。仅阅读一次now() 以保持一致性(两次调用之间会经过时间)。如果日期真的无关紧要,LocalTime 也可以。
        • 谢谢你。我不知何故错过了这个美妙的内置课堂很长一段时间!
        • Ole V.V. 的评论是正确的。但更好的是,使用ZonedDateTime 类而不是LocalDateTime。使用LocalDateTime,您无缘无故地丢弃了宝贵的时区信息,却一无所获。
        • 如果您不必向后兼容,这很有用。如果您正在为 Android 编写并支持较旧的 API 版本(或在 Java 8 并不总是可用的任何其他情况下),遗憾的是不适合。
        • @M_M 对于 Java 6 和 7,大部分 java.time 功能都向后移植到 ThreeTen-Backport 库中。在 ThreeTenABP 中进一步适应了早期的 Android。有关链接,请参阅my Answer 的最后一部分。
        【解决方案7】:

        尝试使用Joda Time 而不是标准的 java.util.Date 类。 Joda Time 库有更好的 API 来处理日期。

        DateTime dt = new DateTime();  // current time
        int month = dt.getMonth();     // gets the current month
        int hours = dt.getHourOfDay(); // gets hour of day
        

        请参阅此question,了解使用 Joda Time 库的利弊。

        Joda Time 也可能作为标准组件包含在 Java 的某些未来版本中,请参阅 JSR-310


        如果您必须使用传统的 java.util.Date 和 java.util.Calendar 类,请参阅它们的 JavaDoc 以获得帮助(java.util.Calendarjava.util.Date)。

        您可以使用像这样的传统类从给定的 Date 实例中获取字段。

        Date date = new Date();   // given date
        Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
        calendar.setTime(date);   // assigns calendar to given date 
        calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
        calendar.get(Calendar.HOUR);        // gets hour in 12h format
        calendar.get(Calendar.MONTH);       // gets month number, NOTE this is zero based!
        

        【讨论】:

        • 问题:现在 Java 8 已经推出了 LocalDateTime,有什么理由应该使用 Joda Time 而不是 LocalDateTime?
        • @Chrips 意见不同。 Joda-Time 官方推荐使用 java.time。
        • 如果您有使用 Joda 的库或遗留的东西,这可能是使用 Joda 和 Java 8 的好理由。否则使用 java.time。
        【解决方案8】:

        import java.util.*您可以使用日历和格式化程序类获取小时和分钟。 Calendar cal = Calendar.getInstance()Formatter fmt=new Formatter() 并设置显示小时和分钟的格式 fmt.format("%tl:%M",cal,cal) 并打印 System.out.println(fmt) 输出显示如 10:12

        【讨论】:

          【解决方案9】:

          我建议您看看 ad joda time。 http://www.joda.org/joda-time/

          我害怕在我的繁重项目中添加另一个库,但它简单、快速、智能且很棒。 另外,在某种程度上,它与现有代码配合得很好。

          【讨论】:

            【解决方案10】:

            首先,导入 java.util.Calendar

            Calendar now = Calendar.getInstance();
            System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));
            

            【讨论】:

              【解决方案11】:

              虽然我不建议这样做,但我认为值得指出的是,尽管 java.util.Date 上的许多方法已被弃用,但它们仍然有效。在琐碎的情况下,使用它们可能是可以的。此外,java.util.Calendar 非常慢,因此 getMonth 和 getYear on Date 可能会更快。

              【讨论】:

                【解决方案12】:

                试试日历。使用 getInstance 获取日历对象。然后使用 setTime 设置所需的日期。现在您可以使用 get(int field) 和适当的常量(例如 HOUR_OF_DAY 左右)来读取您需要的值。

                http://java.sun.com/javase/6/docs/api/java/util/Calendar.html

                【讨论】:

                  【解决方案13】:

                  来自 Date.getHours 的 Javadoc

                  As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)

                  所以用

                  Calendar rightNow = Calendar.getInstance();
                  int hour = rightNow.get(Calendar.HOUR_OF_DAY);
                  

                  和 getMinutes 的等价物。

                  【讨论】:

                  • 那么......如果我想从与现在不对应的日期获取小时数,这将如何工作?
                  • 这个可怕的类在几年前被现代的 java.time 类所取代,采用了 JSR 310。改用 ZonedDateTime
                  猜你喜欢
                  • 2011-12-30
                  • 2020-12-21
                  • 2016-12-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多