获取当前时间的Java代码

Java code for getting current time

本问题已经有最佳答案,请猛点这里访问。

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


试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
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

日历


new java.util.Date()

System.currentTimeMillis()

会给你当前的系统时间。


TL;博士

1
Instant.now()  // UTC

…要么…

1
2
3
4
ZonedDateTime.now(
    // Specify time zone.
    ZoneId.of("Pacific/Auckland" )
)

细节

捆绑的java.util.Date / .Calendar类是众所周知的麻烦。避免他们。它们现在已经遗留下来,取而代之的是java.time框架。

相反,使用:

  • java.time
    内置Java 8及更高版本。 Joda-Time的官方继任者。
    支持Java 6& 7和Android。
  • Joda-Time
    第三方库,开源,免费。

java.time

1
ZonedDateTime zdt = ZonedDateTime.now();

如果需要旧代码,请转换为java.util.Date。在Instant处进行,这是UTC时间轴上的一个时刻。

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

时区

最好明确指定所需/预期的时区,而不是隐式依赖JVM的当前默认时区。

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

乔达时间

仅供参考,Joda-Time项目现在处于维护模式,团队建议迁移到java.time类。

1
DateTime now = DateTime.now();

要从Joda-Time DateTime对象转换为java.util.Date以与其他类进行交互...

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

在发布之前搜索StackOverflow。您的问题已经被问及并回答了。

关于java.time

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

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

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

从哪里获取java.time类?

  • Java SE 8,Java SE 9及更高版本

    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小功能和修复。
  • Java SE 6和Java SE 7

    • 许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
  • Android的

    • 更高版本的Android捆绑java.time类的实现。
    • 对于早期的Android,ThreeTenABP项目采用ThreeTen-Backport(如上所述)。请参见如何使用ThreeTenABP ....

ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的类,例如IntervalYearWeekYearQuarter等。


System.currentTimeMillis的()

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


尝试这种方式,更高效和兼容:

1
2
3
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);

只是为了告知更进一步的开发人员,谢天谢地,罗伯特布尔克,我只想在这个主题上添加我的石头。

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

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

干杯。

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


如上所述,你可以使用

1
Date d = new Date();

或使用

1
Calendar.getInstance();

或者如果你想要毫克

1
System.currentTimeMillis()

试试这个:

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

不太确定你的意思,但你可能只需要

1
Date d = new Date();

新的Date()。getTime()被窃听。

1
2
3
4
5
6
7
    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实例告诉我相应的时间毫秒,它必须返回匹配的而不是来自不同时区的其他时间。有趣的是,弃用的方法是唯一返回正确值的方法。


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

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

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


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

而且每次都应该获得Calendar的新实例以获得当前时间。

要从java代码更改系统时间,可以使用命令行


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

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

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

1
Date d = new Date()

在当前版本的Java中被删除。建议的方法是使用日历对象。例如:

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

我希望这将有助于将来可能提出这个问题的人。谢谢你们。