【发布时间】:2018-11-05 13:03:40
【问题描述】:
我正在尝试使用以下代码转换当前的 UTC 时间(来自我的 Linux 服务器的时间)。
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
public class UtcToIst {
public static void main(String[] args) {
List<String> timeZones = new ArrayList<String>();
String ISTDateString = "";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = sdf.format(new Date());
System.err.println("utcTime: " + utcTime);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String pattern = "dd-MM-yyyy HH:mm:ss";
SimpleDateFormat formatter;
formatter = new SimpleDateFormat(pattern);
try {
String formattedDate = formatter.format(utcTime);
Date ISTDate = sdf.parse(formattedDate);
ISTDateString = formatter.format(ISTDate);
timeZones.add(utcTime+ ","+ ISTDateString);
} catch(Exception e) {
e.printStackTrace();
}
for(String i: timeZones) {
System.out.println(i);
}
}
}
当我执行代码时,我得到以下异常:
utcTime: 05-11-2018 12:55:28
java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:310)
at java.text.Format.format(Format.java:157)
at UtcToIst.main(UtcToIst.java:21)
我看到正确获取的 UTC 时间为:05-11-2018 12:55:28 但是代码无法将字符串解析为 IST(印度标准时间)。 我无法理解如何解决这个问题。 谁能让我知道我在这里犯了什么错误,我该如何解决?
【问题讨论】:
-
utcTime不是Date,而是String,因此出现错误... -
我建议你避免使用
SimpleDateFormat类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。 -
你怎么好像错过了这个问题已经被问过一百次了?
-
提示:将您的异常消息粘贴到您的搜索引擎中。它通常会导致一个好的解决方案。
-
您应该真正遵循 Java 命名约定:变量名总是以小写字母开头。
标签: java simpledateformat datetime-format