【发布时间】:2010-10-24 10:37:05
【问题描述】:
我正在java 中搜索代码,以获取或同步我的本地 PC 系统时间到我的应用程序中。
【问题讨论】:
我正在java 中搜索代码,以获取或同步我的本地 PC 系统时间到我的应用程序中。
【问题讨论】:
不太清楚你的意思,但你可能只是需要
Date d = new Date();
【讨论】:
两者
new java.util.Date()
和
System.currentTimeMillis()
会给你当前的系统时间。
【讨论】:
如上所述,您可以使用
Date d = new Date();
或使用
Calendar.getInstance();
或者如果你想要它以毫秒为单位
System.currentTimeMillis()
【讨论】:
要获取系统时间,请使用 Calendar.getInstance().getTime()
并且您应该每次都获取日历的新实例以拥有当前时间。
要更改 java 代码中的系统时间,您可以使用命令行
【讨论】:
你可以使用 new Date() ,它会给你当前时间。
如果您需要以某种格式表示它(通常您需要这样做),那么请使用格式化程序。
DateFormat df = DateFormat.getDateTimeInstance (DateFormat.MEDIUM, DateFormat.MEDIUM, new Locale ("en", "EN"));
String formattedDate = df.format (new Date ());
【讨论】:
System.currentTimeMillis()
其他一切都可以解决这个问题。例如 new Date() 调用 System.currentTimeMillis()。
【讨论】:
试试这个:
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:
【讨论】:
new java.text.SimpleDateFormat("HH:mm:ss").format(java.util.Calendar.getInstance().getTime())
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 告诉我相应的时间毫秒,因此它必须返回匹配的时间而不是来自不同时区的其他时间。有趣的是,不推荐使用的方法是唯一返回正确值的方法。
【讨论】:
我知道这是一个很老的问题。但想澄清一点:
Date d = new Date()
在当前版本的 Java 中已被贬低。推荐的方法是使用日历对象。例如:
Calendar cal = Calendar.getInstance();
Date currentTime = cal.getTime();
我希望这对将来可能会提到这个问题的人有所帮助。谢谢大家。
【讨论】:
Date() 构造函数被不弃用(从 Java 8 开始)。该类的其他方法已被弃用,但不是那个。实际上,您应该将其视为已弃用,而应在 Java 8 中使用 Joda-Time 或新的 java.time package。
Instant.now() // UTC
……或者……
ZonedDateTime.now(
// Specify time zone.
ZoneId.of( "Pacific/Auckland" )
)
捆绑的java.util.Date/.Calendar 类是出了名的麻烦。避开他们。它们现在是遗留的,被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 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
试试这个来获取当前日期。您还可以使用 getter 获取当前小时、分钟和秒:
new Date(System.currentTimeMillis()).get....()
【讨论】:
试试这种方式,更高效且兼容:
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);
【讨论】:
只是为了通知更多的开发人员,感谢 Basil Bourque,我只是想为这个主题添加我的石头。
如果您只想获取 HH:MM:SS 格式,请执行以下操作:
LocalTime hour = ZonedDateTime.now().toLocalTime().truncatedTo(ChronoUnit.SECONDS);
干杯。
P.S.:这至少只适用于 Java 8 !
【讨论】:
试试这个:
final String currentTime = String.valueOf(System.currentTimeMillis());
【讨论】: