如何使用 Java 将当前 UTC 时区转换为印度标准时间
How to convert current UTC Timezone to Indian Standard Time using Java
我正在尝试使用以下代码转换当前 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 不是日期,它是字符串)。
String formattedDate = formatter.format(utcTime);
只需替换:
String formattedDate = formatter.format(utcTime);
Date ISTDate = sdf.parse(formattedDate);
与:
Date ISTDate = sdf.parse(utcTime);
整个class:
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 {
Date ISTDate = sdf.parse(utcTime);
ISTDateString = formatter.format(ISTDate);
timeZones.add(utcTime+ ","+ ISTDateString);
} catch(Exception e) {
e.printStackTrace();
}
for(String i: timeZones) {
System.out.println(i);
}
}
}
改为使用 LocalDateTime
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now));
注意:如果服务器时区不是印度时区,@Benoit 的回答会产生不正确的时间结果,应明确将时区设置为印度。
首先:在 SimpleDateFormat
上设置正确的时区,Asia/Kolkata 为印度时间。
其二:使用utc格式器解析格式化后的时间字符串得到utc时间实例。
Last: 使用 Indian 来格式化 utc 时间实例。
见以下代码:
SimpleDateFormat utcFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = utcFormatter.format(new Date());
System.err.println("utcTime: " + utcTime);
Date utcTimeInstance = utcFormatter.parse(utcTime);
SimpleDateFormat indianFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
indianFormatter.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
String indianTime = indianFormatter.format(utcTimeInstance);
System.err.println("indianTime: " + indianTime);
在我的电脑上打印:
utcTime: 05-11-2018 13:42:31
indianTime: 05-11-2018 19:12:31
我正在尝试使用以下代码转换当前 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 不是日期,它是字符串)。
String formattedDate = formatter.format(utcTime);
只需替换:
String formattedDate = formatter.format(utcTime);
Date ISTDate = sdf.parse(formattedDate);
与:
Date ISTDate = sdf.parse(utcTime);
整个class:
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 {
Date ISTDate = sdf.parse(utcTime);
ISTDateString = formatter.format(ISTDate);
timeZones.add(utcTime+ ","+ ISTDateString);
} catch(Exception e) {
e.printStackTrace();
}
for(String i: timeZones) {
System.out.println(i);
}
}
}
改为使用 LocalDateTime
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now));
注意:如果服务器时区不是印度时区,@Benoit 的回答会产生不正确的时间结果,应明确将时区设置为印度。
首先:在 SimpleDateFormat
上设置正确的时区,Asia/Kolkata 为印度时间。
其二:使用utc格式器解析格式化后的时间字符串得到utc时间实例。
Last: 使用 Indian 来格式化 utc 时间实例。
见以下代码:
SimpleDateFormat utcFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = utcFormatter.format(new Date());
System.err.println("utcTime: " + utcTime);
Date utcTimeInstance = utcFormatter.parse(utcTime);
SimpleDateFormat indianFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
indianFormatter.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
String indianTime = indianFormatter.format(utcTimeInstance);
System.err.println("indianTime: " + indianTime);
在我的电脑上打印:
utcTime: 05-11-2018 13:42:31
indianTime: 05-11-2018 19:12:31