为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Java 将当前 UTC 时区转换为印度标准时间

如何使用 Java 将当前 UTC 时区转换为印度标准时间

叮当猫咪 2021-12-30 19:45:49
我正在尝试使用以下代码转换当前的 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:28java.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(印度标准时间)。我无法理解如何解决问题。谁能让我知道我在这里犯了什么错误,我该如何解决?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

此行无用并导致错误(utcTime 不是日期,而是字符串)。


       String formattedDate = formatter.format(utcTime);

只需更换:


        String formattedDate = formatter.format(utcTime);

        Date ISTDate = sdf.parse(formattedDate);

和:


        Date ISTDate = sdf.parse(utcTime);

全班:


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);

        }

    }

}


查看完整回答
反对 回复 2021-12-30
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

改用 LocalDateTime


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");

LocalDateTime now = LocalDateTime.now();

System.out.println(dtf.format(now));


查看完整回答
反对 回复 2021-12-30
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

注意:如果服务器时区不是印度时区,@Benoit 的回答会产生错误的时间结果,应明确设置时区为印度。


第一:在SimpleDateFormat, Asia/Kolkata 上为印度时间设置正确的时区。


第二:使用utc formatter解析格式化的时间字符串,得到utc时间实例。


最后: 使用 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


查看完整回答
反对 回复 2021-12-30
  • 3 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信