如何将 MST 时区转换为 IST 格式,然后希望将其保留在 java 的数据库中



我是Java的新手。我有一个在美国的 godaddy 服务器上运行的 Web 应用程序。

问题是当我们在任何地方使用该应用程序时,我们需要使用数据库中的相应时间戳更新日期。更新时,它存储为 MST 格式日期而不是 IST 格式(当我从印度尝试时)。让我知道我该如何解决这个问题。

提前谢谢。

我的代码如下。

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("IST"));
String date =  f.format(new Date());
Date aptDate = formatter.parse(date);
System.Out.Print("The IST time  is : "+ date); 

在这里,我正在获取字符串格式的日期,我想转换为日期对象,然后存储在数据库中。

当我应用转换时,它会给出更早的日期。让我来错什么。

你的问题令人困惑。这里有一些指导方针可以重新定位你的思维。

您正在使用旧的日期时间类,这些类现在已被 Java 8 及更高版本中内置的 java.time 框架所淘汰。避免使用旧类,因为它们设计不佳、令人困惑且麻烦。

停止使用 3-4 个字母的代码,例如 IST .你是说印度标准时间还是爱尔兰时间?这些代码既不是标准化的,也不是唯一的。从你的思维和代码中删除这些代码。以 continent/region 的格式使用正确的时区名称。

使用 UTC 完成大部分工作、业务逻辑、数据交换、数据存储和数据库。仅当用户或数据接收器预期时才应用时区。

在数据库中定义列时使用日期时间类型。不要将日期时间值存储为字符串。

使用 java.sql 类型将日期时间值传入和传出数据库。立即转换为 java.time 类型。最终,JDBC 驱动程序将更新为直接使用 java.time 类型。在那一天之前,使用添加到旧 java.sql 类中的新方法进行方便的转换。

Instant是时间轴上的一个时刻,采用 UTC 格式。

Instant now = Instant.now();

转换为 java.sql.Timestamp 以写入数据库。

java.sql.Timestamp ts = java.sql.Timestamp.from( now );

到另一个方向,为了检索,从java.sql转换为java.time。

Instant instant = myJavaSqlTimestamp.toInstant();

请注意,对于数据库工作,我们不关心时区,因为所有方面的值都是UTC:Java,JDBC,SQL,数据库。

要查看某个位置的挂钟时间,请应用时区 ( ZoneId ) 生成ZonedDateTime对象。

ZoneId zoneIdEdmonton = zoneId.of( "America/Edmonton" );
ZonedDateTime zdtEdmonton = ZonedDateTime.ofInstant( instant , zoneIdEdmonton );

您可以应用另一个时区。请注意,java.time 使用不可变的对象。新对象产生于旧对象,而不是更改("改变")原始对象。在此示例中,zdtEdmonton对象生成zdtKolkata对象。

ZoneId zoneIdKolkata = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdtKolkata = zdtEdmonton.withZoneSameInstant( zoneIdKolkata );

相关内容

最新更新