我可以获取当前的时间和时区,但它总是打印在
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
)
您还没有显示您实际上在哪里使用
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?在什么平台上?
这是一个老问题了。然而,它可能对新的 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"
接受的答案使用旧版日期时间和格式化 API,这是 2012 年正确的做法。2014 年 3 月,现代日期时间 API 取代了旧版日期时间 API。从那时起,强烈建议切换到现代日期时间 API
java.time
。
除了远离旧的日期时间和格式化 API 之外,还应该避免使用两/三个字母的时区 ID。以下是官方文档的摘录:
三字母时区 ID
为了兼容 JDK 1.1.x,其他一些三字母时区 ID(例如“PST”、“CTT”、“AST”) 也得到支持。然而,它们的使用已被弃用,因为 相同的缩写通常用于多个时区(例如, “CST”可以是美国“中部标准时间”和“中国标准时间” 时间”),那么 Java 平台只能识别其中之一。
时区 ID 通常表示为地区/城市,例如亚洲/加尔各答。检查此页面了解更多信息。
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
您的时区设置似乎错误。以下代码将打印
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
。
进来的,出来的都是一样的。