java - 时区会影响 java.util.Date.compareTo() 结果吗?
问题描述
我有一个程序存储托管在 FTP 服务器中的文件的本地副本。该程序每天使用以下代码自动检查服务器上的文件是否已更新:
FTPFile remoteFile = ftpClient.mlistFile(remotePath);
Date remoteDate = remoteFile.getTimestamp().getTime();
BasicFileAttributes localFile = Files.readAttributes(Paths.get(localPath), BasicFileAttributes.class);
Date localDate = new Date(localFile.lastModifiedTime().toMillis());
isUpToDate = localDate.compareTo(remoteDate) > 0;
我和我的同事现在对这段代码存在分歧。他说如果程序在不同的时区执行,这可能不起作用,我说它会起作用,因为 Java Date 对象不受时区影响,只有 Calendar 的实例受。我对吗 ?他说得对吗?
解决方案
不,java.util.Date
时区无关紧要,它始终是自 Unix 纪元以来的毫秒数。如果您想要不同时区的时间,那么您需要执行以下操作 -
public static void main(String[] args) {
Date date = new Date();
// Display the instant in three different time zones
TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));
System.out.println(date);
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
System.out.println(date);
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Riyadh"));
System.out.println(date);
// Prove that the instant hasn't changed...
System.out.println(date.getTime());
}
推荐阅读
- json - 快速解码 Json - 数组但现在是字典
- python - 通过 GCP 云功能安全访问存储?
- ionic-framework - Ionic-React 自定义动画过渡渲染页面两次
- google-apps-script - GAS 库中导出了哪些成员?
- c# - 如何将 ECDsa 公钥和私钥保存为字符串
- algorithm - 为什么递归合并排序优于迭代合并排序,即使后者具有辅助空间复杂度?
- python - 如何将两列/多组 groupby() objetc 转换为数据框?
- c++ - 谷歌 ORTools C++ Makefile
- android - 有什么方法可以在 Android 设备之间传输数据而无需用户接受连接?
- firebase - 数据库未存储在 firebase 数据库中