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