【问题标题】:Java code for getting current time [duplicate]用于获取当前时间的 Java 代码 [重复]
【发布时间】:2010-10-24 10:37:05
【问题描述】:

我正在java 中搜索代码,以获取或同步我的本地 PC 系统时间到我的应用程序中。

【问题讨论】:

    标签: java time


    【解决方案1】:

    不太清楚你的意思,但你可能只是需要

    Date d = new Date();
    

    【讨论】:

      【解决方案2】:

      两者

      new java.util.Date()

      System.currentTimeMillis()

      会给你当前的系统时间。

      【讨论】:

        【解决方案3】:

        如上所述,您可以使用

        Date d = new Date();
        

        或使用

        Calendar.getInstance();
        

        或者如果你想要它以毫秒为单位

        System.currentTimeMillis()
        

        【讨论】:

          【解决方案4】:

          要获取系统时间,请使用 Calendar.getInstance().getTime()

          并且您应该每次都获取日历的新实例以拥有当前时间。

          更改 java 代码中的系统时间,您可以使用命令行

          【讨论】:

            【解决方案5】:

            你可以使用 new Date() ,它会给你当前时间。

            如果您需要以某种格式表示它(通常您需要这样做),那么请使用格式化程序。

            DateFormat df = DateFormat.getDateTimeInstance (DateFormat.MEDIUM, DateFormat.MEDIUM, new Locale ("en", "EN"));
            String formattedDate = df.format (new Date ());
            

            【讨论】:

              【解决方案6】:

              System.currentTimeMillis()

              其他一切都可以解决这个问题。例如 new Date() 调用 System.currentTimeMillis()。

              【讨论】:

                【解决方案7】:

                试试这个:

                import java.text.SimpleDateFormat;
                import java.util.Calendar;
                
                public class currentTime {
                
                    public static void main(String[] args) {
                        Calendar cal = Calendar.getInstance();
                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                        System.out.println( sdf.format(cal.getTime()) );
                    }
                
                }
                

                您可以按照自己喜欢的方式格式化 SimpleDateFormat。有关任何其他信息,您可以查看 java api:

                SimpleDateFormat

                Calendar

                【讨论】:

                • 不需要调用 cal.getTime() 方法 2 次,它可以在像这样格式化日期后分配给字符串.......SimpleDateFormat sdf = new SimpleDateFormat("HH :mm:ss");String loginTime = sdf.format(cal.getTime());
                • 仅供参考,这里使用的麻烦类现在是遗留的,被 java.time 类所取代。
                • 对于懒惰的人(oneliner,没有导入,只需复制粘贴即可):new java.text.SimpleDateFormat("HH:mm:ss").format(java.util.Calendar.getInstance().getTime())
                【解决方案8】:

                new Date().getTime() 有问题

                    Date date = new Date();
                    System.out.println(date);
                    System.out.println(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
                    long t1 = date.getTime();
                    System.out.println((t1 / 1000 / 60 / 60) % 24 + ":" + (t1 / 1000 / 60) % 60 + ":" + (t1 / 1000) % 60);
                    long t2 = System.currentTimeMillis();
                    System.out.println((t2 / 1000 / 60 / 60) % 24 + ":" + (t2 / 1000 / 60) % 60 + ":" + (t2 / 1000) % 60);
                

                它返回错误的时间毫秒。 System.currentTimeMillis() 也是。由于我要求 Date instance 告诉我相应的时间毫秒,因此它必须返回匹配的时间而不是来自不同时区的其他时间。有趣的是,不推荐使用的方法是唯一返回正确值的方法。

                【讨论】:

                • 我非常非常怀疑您声称的错误。当然,除非您的系统时钟设置不正确。
                【解决方案9】:

                我知道这是一个很老的问题。但想澄清一点:

                Date d = new Date() 
                

                在当前版本的 Java 中已被贬低。推荐的方法是使用日历对象。例如:

                Calendar cal = Calendar.getInstance();
                Date currentTime = cal.getTime();
                

                我希望这对将来可能会提到这个问题的人有所帮助。谢谢大家。

                【讨论】:

                • 票数最高的答案已经有日历版本。您的帖子到底添加了什么?
                • 是的。但是所有其他答案都谈到了被贬低的构造函数。刚刚添加了一个说明。谢谢。
                • 不正确:Date() 构造函数被弃用(从 Java 8 开始)。该类的其他方法已被弃用,但不是那个。实际上,您应该将其视为已弃用,而应在 Java 8 中使用 Joda-Time 或新的 java.time package
                【解决方案10】:

                tl;博士

                Instant.now()  // UTC
                

                ……或者……

                ZonedDateTime.now(
                    // Specify time zone.
                    ZoneId.of( "Pacific/Auckland" )
                )  
                

                详情

                捆绑的java.util.Date/.Calendar 类是出了名的麻烦。避开他们。它们现在是遗留的,被java.time 框架所取代。

                请改用:

                java.time

                ZonedDateTime zdt = ZonedDateTime.now();
                

                如果需要旧代码,请转换为 java.util.Date。通过Instant 浏览,这是UTC 时间线上的一个时刻。

                java.util.Date date = java.util.Date.from( zdt.toInstant() );
                

                时区

                最好明确指定您的 desired/expected time zone,而不是隐式依赖 JVM 的 current default time zone

                ZoneId zoneId = ZoneId.of( "America/Montreal" );
                ZonedDateTime zdt = ZonedDateTime.now( zoneId );  // Pass desired/expected time zone.
                

                乔达时间

                仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。

                DateTime now = DateTime.now();
                

                从 Joda-Time DateTime 对象转换为 java.util.Date 以便与其他类互操作...

                java.util.Date date = now.toDate();
                

                在发布之前搜索 StackOverflow。您的问题已被提出并回答。


                关于java.time

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

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

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

                从哪里获得 java.time 类?

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

                【讨论】:

                • 在 09 年 5 月 7 日之前,他的问题是否也被多次回答?
                • @skiwi (a) 实际上,是的。 HereHere。 (b) 但是,我确实没有注意到问题的年龄。
                【解决方案11】:

                试试这个来获取当前日期。您还可以使用 getter 获取当前小时、分钟和秒:

                new Date(System.currentTimeMillis()).get....()
                

                【讨论】:

                  【解决方案12】:

                  试试这种方式,更高效且兼容

                  SimpleDateFormat time_formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS");
                  String current_time_str = time_formatter.format(System.currentTimeMillis());
                  //Log.i("test", "current_time_str:" + current_time_str);
                  

                  【讨论】:

                    【解决方案13】:

                    只是为了通知更多的开发人员,感谢 Basil Bourque,我只是想为这个主题添加我的石头。

                    如果您只想获取 HH:MM:SS 格式,请执行以下操作:

                    LocalTime hour = ZonedDateTime.now().toLocalTime().truncatedTo(ChronoUnit.SECONDS);
                    

                    干杯。

                    P.S.:这至少只适用于 Java 8 !

                    【讨论】:

                      【解决方案14】:

                      试试这个:

                      final String currentTime    = String.valueOf(System.currentTimeMillis());
                      

                      【讨论】:

                        猜你喜欢
                        • 2016-04-23
                        • 1970-01-01
                        • 2018-01-05
                        • 2011-02-18
                        • 2011-07-05
                        • 2010-10-17
                        • 2019-04-15
                        相关资源
                        最近更新 更多