在java中将GMT转换为IST?

在java中将GMT转换为IST?,java,Java,我有一个GMT字段,用户在其中输入要转换为IST的时间(例如:小时字段18,分钟字段30,会话字段am/pm)。我需要获得这些输入并在java中将其转换为IST???如果您意识到时区仅与格式为字符串秒/毫秒的日期相关,这是非常简单和明显的-时间戳(其中java.util.date只是一个包装器)总是隐式地表示UTC(正确地称为GMT)。在这样的时间戳和字符串之间转换总是使用时区,这两种方式都是如此 这就是你需要做的: DateFormat utcFormat = new SimpleDa

我有一个GMT字段,用户在其中输入要转换为IST的时间(例如:小时字段18,分钟字段30,会话字段am/pm)。我需要获得这些输入并在java中将其转换为IST???

如果您意识到时区仅与格式为字符串秒/毫秒的日期相关,这是非常简单和明显的-时间戳(其中
java.util.date
只是一个包装器)总是隐式地表示UTC(正确地称为GMT)。在这样的时间戳和字符串之间转换总是使用时区,这两种方式都是如此

这就是你需要做的:

    DateFormat utcFormat = new SimpleDateFormat(patternString);
    utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    DateFormat indianFormat = new SimpleDateFormat(patternString);
    indianFormat .setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
    Date timestamp = utcFormat.parse(inputString);
    String output = indianFormat.format(timestamp);
好吧,乔达时间比较容易。试试这样的

DateTime dt = new DateTime(<year>,<month>,<day>, <hour>,<minute>, <second>, <millisecond>);
DateTime dtIST = dt.withZone(DateTimeZone.forTimeZone(TimeZone.getTimeZone("IST");
DateTime dt=newdatetime(,,,);
DateTime dtIST=dt.withZone(DateTimeZone.forTimeZone)(TimeZone.getTimeZone(“IST”);
请注意,这里不推荐使用三个字母的缩写,时区应该被称为“America/Los_Angeles”指的是PST。我现在没有时间获得IST的相应名称,但应该留给读者一些练习

更新:正如Basil Bourque在评论中所说,Joda Time处于维护模式。请改用java.Time。

tl;dr 细节 现代方法使用java.time类

将当前日期作为一天中没有时间、没有时区或偏移量的日期获取

LocalDate localDate = LocalDate.now( ZoneOffset.UTC );
LocalTime localTime = LocalTime.of( 18 , 30 );
将每个用户输入的时间指定为不带日期、不带时区或偏移量的时间

LocalDate localDate = LocalDate.now( ZoneOffset.UTC );
LocalTime localTime = LocalTime.of( 18 , 30 );
把它们和一个为零的常数放在一起,得到一个

将时区应用为
ZoneId
以获得印度时间的
zoneDateTime
。或者IST是指爱尔兰标准时间还是伊朗标准时间

请以
大陆/地区
的格式指定一个,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)

看这个

localDate.toString():2017-02-13

localTime.toString():18:30

odt.toString():2017-02-13T18:30Z

zdt.toString():2017-02-14T00:00+05:30[亚洲/加尔各答]


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。该项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如、、和。

当我添加以下代码时,它对我很有用

DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
                            utcFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
                            DateFormat indianFormat = new SimpleDateFormat("dd-HH-mm");
                            utcFormat.setTimeZone(TimeZone.getTimeZone("IST"));
                            Date timestamp = utcFormat.parse("2019-04-26-19-00");
                            String istTime = indianFormat.format(timestamp);

IST=印度/爱尔兰/以色列/伊朗标准时间?@harishtps您没有领会Kutik评论的要点。3-4个字母的缩写不是实际的时区,没有标准化,甚至不是唯一的!您的
IST
至少在地球上的四个不同地方使用。避免这些伪时区。A采用
大陆/地区
格式例如
Asia/Kolkata
.GMT和UTC的定义稍有不同,但总体效果在实践中是微不足道的。它不应该是
indianFormat.setTimeZone(TimeZone.getTimeZone(“Asia/Kolkata”);
?三个字母的形式被弃用的原因是它不明确(例如,我确信英国夏令时同时代表英国夏令时(即GMT+DST)和巴西标准时间。)“大陆/城市”表格没有这些问题。更新:该项目现在正在进行中,并建议迁移到课程中。
DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
                            utcFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
                            DateFormat indianFormat = new SimpleDateFormat("dd-HH-mm");
                            utcFormat.setTimeZone(TimeZone.getTimeZone("IST"));
                            Date timestamp = utcFormat.parse("2019-04-26-19-00");
                            String istTime = indianFormat.format(timestamp);