如何在 IST 中打印时间?

问题描述 投票:0回答:4

我可以获取当前的时间和时区,但它总是打印在

Wed May 23 11:01:08 GMT+05:30 2012

作为时区,我得到

GMT+05:30
。而不是这个,我想打印
IST

我试过了

 SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");

但是,我仍然

GMT+05:30

TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT); is also givine me GMT+05:30

我尝试了多种方法,但没有得到所需的输出。我已经使用了

Calender
但仍然无法打印
IST

任何人都可以告诉我如何及时打印

IST
(即使我不想打印
Indian standard time

java datetime
4个回答
9
投票

您还没有显示您实际上在哪里使用

SimpleDateFormat
。这是一个简短但完整的示例,确实显示了 IST:

import java.text.*;
import java.util.*;

class Test {
    public static void main(String[] args) {
        SimpleDateFormat sd = new SimpleDateFormat(
            "yyyy.MM.dd G 'at' HH:mm:ss z");
        Date date = new Date();
        // TODO: Avoid using the abbreviations when fetching time zones.
        // Use the full Olson zone ID instead.
        sd.setTimeZone(TimeZone.getTimeZone("IST"));
        System.out.println(sd.format(date));
   }
}

我的机器上的输出:

2012.05.23 AD at 11:18:08 IST

请注意,如果

TimeZone.getDefault()
未显示“IST”,则问题可能是:

  • 系统无法真正识别您的系统时区
  • 您的 Java 安装没有有关 i18n 的完整时区信息

您使用的是哪个版本的 Java?在什么平台上?


1
投票

这是一个老问题了。然而,它可能对新的 Java 数据/时间 API 有所帮助,因为其他答案使用旧的。

可以使用 ZonedDateTime 以请求的格式打印数据/时间。以下示例使用问题中给出的模式。

ZonedDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("IST"))).format(DateTimeFormatter.ofPattern("yyyy.MM.dd G 'at' HH:mm:ss z"))

您首先基于 IST 区域创建日期/时间实例。然后,您可以使用给定的模式调用格式函数,以所需的格式打印日期/时间。

它在 IST 中打印结果:

jshell> ZonedDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("IST"))).format(DateTimeFormatter.ofPattern("yyyy.MM.dd G 'at' HH:mm:ss z"))
$10 ==> "2023.10.29 AD at 20:19:38 IST"

1
投票

java.time

接受的答案使用旧版日期时间和格式化 API,这是 2012 年正确的做法。2014 年 3 月,现代日期时间 API 取代了旧版日期时间 API。从那时起,强烈建议切换到现代日期时间 API

java.time

除了远离旧的日期时间和格式化 API 之外,还应该避免使用两/三个字母的时区 ID。以下是官方文档的摘录:

三字母时区 ID

为了兼容 JDK 1.1.x,其他一些三字母时区 ID(例如“PST”、“CTT”、“AST”) 也得到支持。然而,它们的使用已被弃用,因为 相同的缩写通常用于多个时区(例如, “CST”可以是美国“中部标准时间”和“中国标准时间” 时间”),那么 Java 平台只能识别其中之一。

时区 ID 通常表示为地区/城市,例如亚洲/加尔各答。检查此页面了解更多信息。

现代日期时间 API 提供了一个

ZonedDateTime
类,用于保存有关时区和区域偏移量的信息。这个类最好的事情是它根据DST自动调整区域偏移。

演示

public class Main {
    public static void main(String[] args) {
        var zoneId = ZoneId.of("Asia/Kolkata");

        // Current time in India
        var now = ZonedDateTime.now(zoneId);
        System.out.println(now);

        // ###### Print the ZonedDateTime in custom formats ######

        var formatter1 = DateTimeFormatter.ofPattern("uuuu.MM.dd G 'at' HH:mm:ss z", Locale.ENGLISH);
        String strDateTimeCustomFormat = now.format(formatter1);
        System.out.println(strDateTimeCustomFormat);

        var formatter2 = DateTimeFormatter.ofPattern("uuuu.MM.dd G 'at' HH:mm:ss VV", Locale.ENGLISH);
        strDateTimeCustomFormat = now.format(formatter2);
        System.out.println(strDateTimeCustomFormat);
    }
}

示例运行的输出:

2024-03-02T22:27:55.546343100+05:30[Asia/Kolkata]
2024.03.02 AD at 22:27:55 IST
2024.03.02 AD at 22:27:55 Asia/Kolkata

在线演示

Trail:日期时间

了解现代日期时间 API

0
投票

您的时区设置似乎错误。以下代码将打印

2012.05.23 AD at 11:30:20 IST

TimeZone.setDefault(TimeZone.getTimeZone("IST"));
SimpleDateFormat f = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
System.out.println(f.format(new Date()));

但是,如果我使用

TimeZone.setDefault(TimeZone.getTimeZone("GMT+05:30"));

我会得到

2012.05.23 AD at 11:30:20 GMT+05:30

进来的,出来的都是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.