java - Android 将字符串转换为日期会更改整个日期时间

标签 java android calendar

为什么输出不一样?

   Date currentTrueSystemDate = Calendar.getInstance().getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kuwait"));
    String newConvertedDate = sdf.format(currentTrueSystemDate.getTime());
    System.out.println(newConvertedDate);
    try {
        Date newConvertedDate2 = sdf.parse(newConvertedDate);
        System.out.println(newConvertedDate2);
    } catch (ParseException e) {
        System.out.println(e.getLocalizedMessage());
    }

输出:

 I/System.out: 27-Sep-2018 09:16:52
 I/System.out: Thu Sep 27 07:16:52 GMT+01:00 2018

我将“newConvertedDate”从字符串转换为日期的原因是我想在其上使用 .before.after 函数。我不明白为什么将字符串解析为日期会更改时间?

最佳答案

I don't understand why parsing a string into date changes the time?

format() 将日期(没有时区,它是自 1970-01-01 00:00:00 UTC 以来经过的毫秒数)转换为时区中的字符串表示形式在这种情况下,您指定了科威特。

所以第一次你在科威特时区得到一个字符串并打印它。这只是一个没有时区信息的字符串。但时间是科威特时间。

然后使用 parse() 将字符串转换为日期,假设日期是科威特时间,因为 sdf 实例是相同的。现在这个字符串被转换为日期,System.out.println 将它打印在您本地的时区。

需要注意的是,两个时间相同,只是时区不同。

如果你想要相同的时间,你需要创建一个新的 SimpleDateFormat 实例并将日期字符串传递给它。因此它会假定这是本地时区日期并解析以返回一个日期,该日期在打印时将再次给出相同的值。但是请注意,这个日期与之前的日期不同,只是时间相同。

这样做

Date currentTrueSystemDate = Calendar.getInstance().getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kuwait"));
        String newConvertedDate = sdf.format(currentTrueSystemDate.getTime());
        System.out.println(newConvertedDate);
        try {
            sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
            Date newConvertedDate2 = sdf.parse(newConvertedDate);
            System.out.println(newConvertedDate2);
        } catch (ParseException e) {
            System.out.println(e.getLocalizedMessage());
        }

关于java - Android 将字符串转换为日期会更改整个日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52543064/

相关文章:

android - 如何将文件传输到在 VirtualBox 中运行的 android 2.2?我安装了假SD卡

algorithm - 识别具有相同星期几的年份(例如 1994、2005、2011)

java - Android +4.0 中的日历

java - xvfb 上来自 Maven 的 Selenium TestSuit

java - 从 netbeans 中的 sql 表中获取值

java - 强制不变性

android - java.lang.RuntimeException : eglSwapBuffers failed: EGL_SUCCESS report 错误

android - 从Service发送数据到Fragment,Android

Javascript 日历

java - Buck - java.lang.UnsatisfiedLinkError : couldn't find "libjni.so". 如何解决?