代码之家  ›  专栏  ›  技术社区  ›  Metadata

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

  •  1
  • Metadata  · 技术社区  · 6 年前

    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)
    

    我不明白怎样才能解决这个问题。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Benoit    6 年前

           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);
            }
        }
    }
    
        2
  •  0
  •   tornike    6 年前

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
    LocalDateTime now = LocalDateTime.now();
    System.out.println(dtf.format(now));
    
        3
  •  0
  •   gavincook    6 年前

    注意 @Benoit的答案产生错误的时间结果如果服务器时区不是印度时区,则应显式地将时区设置为印度时区。

    弗斯特 :设置正确的时区 SimpleDateFormat ,亚洲/加尔各答为印度时间。

    第二

    最后 :使用印度语格式化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