用于获取当前时间的 Java 代码 [重复]

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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内置于 Java 8 及更高版本。 Joda-Time 的正式继任者。向后移植 to Java 6 & 7 和 to androidJoda-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();

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


关于java.time

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

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

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

从哪里获得 java.time 类?

Java SE 8Java SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能都在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android 更高版本的 Android 捆绑包实现 java.time 类。 对于早期的 Android,ThreeTenABP 项目采用 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

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

【讨论】:

在 09 年 5 月 7 日之前,他的问题是否也被多次回答? @skiwi (a) 实际上,是的。 Here。 Here。 (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());

【讨论】:

以上是关于用于获取当前时间的 Java 代码 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java从unix时间戳获取当前日期[重复]

如何获取.java文件的目录[重复]

如何从输入 JS/jQuery 中获取当前值 [重复]

Java,如何在“for each”循环中获取当前索引/键[重复]

如何在Java中获取Tomcat版本号[重复]

获取用于从 Android 设备连接到 Firebase 的 IP 地址 [重复]