首页 > 解决方案 > 时区会影响 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 的实例受。我对吗 ?他说得对吗?

标签: javadateftp

解决方案


不,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());
    }

推荐阅读