当前位置: 首页 > 知识库问答 >
问题:

使用Joda时间库在JAVA中从UTC到IST返回相同值的转换

督阿苏
2023-03-14

我需要在我的项目中转换时区从UTC到IST,反之亦然。为此,我在我的项目中使用了Joda time jar。但是当我试图将字符串从UTC转换为IST时,问题就出现了,我得到的是相同的值,而不是转换后的IST值。好心地请指导我在代码的哪一部分我完全站起来。我的代码如下:

public class JodaDemo {

    public static final String DATE_PATTERN_SERVICE = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_PATTERN_SERVICE_NO_SECONDS = "yyyy-MM-dd HH:mm";

    public static void main(String[] args) {

        getDateFromUTCtoIST("2015-08-23 10:34:40");

    }
private static void getDateFromUTCtoIST(String dateTime) {

        DateTimeFormatter dtf = DateTimeFormat.forPattern(DATE_PATTERN_SERVICE);
        DateTime jodatime = dtf.parseDateTime(dateTime);
        DateTimeZone indianTimeZone = DateTimeZone.forID("Asia/Kolkata");
        DateTime indianTime = jodatime.withZone(indianTimeZone);

        System.out.println(indianTime);

    }
2015-08-23T10:34:40.000+05:30

预期产出:

转换后的时区(+5:30输出)类似于yyyy-mm-dd hh:mm:ss格式

共有1个答案

淳于俊迈
2023-03-14

这里有两个问题。首先,当您解析值时,您没有指定时区-所以它使用的是您的本地时区。其次,您没有对结果使用任何格式化程序--您只是隐式地调用datetime.tostring()

最简单的方法实际上是为相同的模式创建两个格式化程序,一个在UTC中,一个在相关的时区中--然后您根本不需要手动转换,因为格式化程序可以为您完成:

import java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;

public class Test {

  public static final String DATE_PATTERN_SERVICE = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) {        
        DateTimeFormatter utcFormatter = DateTimeFormat
            .forPattern(DATE_PATTERN_SERVICE)
            .withLocale(Locale.US)
            .withZoneUTC();
        DateTimeZone indianZone = DateTimeZone.forID("Asia/Kolkata");
        DateTimeFormatter indianZoneFormatter = utcFormatter.withZone(indianZone);

        String utcText = "2015-08-23 10:34:40";
        DateTime parsed = utcFormatter.parseDateTime(utcText);
        String indianText = indianZoneFormatter.print(parsed);
        System.out.println(indianText); // 2015-08-23 16:04:40
    }
}
 类似资料:
  • 我正在尝试使用Joda在一个简单的Java程序中获取UTC时间戳: 程序输出如下: 毫秒值是正确的UTC时间(即用时区确认)第二个值是时区。 我需要的是UTC值不变为(即独立于TZ),用于数据库写入。这可能吗? 我知道是本地日期(GMT-4),是UTC(GMT-0)。日期的输出值如下: 我尝试了所有组合,试图将的UTC值作为java.sql.TimeStamp: 用于测试的打印输出: 第一行是正确

  • 问题内容: 我想以毫秒为单位获取当前UTC时间。我搜索了google,并得到了一些System.currentTimeMillis()确实返回UTC时间的答案。但事实并非如此。如果我执行以下操作: 这三个时间几乎都相同(由于通话,相差以毫秒为单位)。 这不是UTC时间,而是我的时区时间。如何在Android中获取当前UTC时间? 问题答案: 您显示的所有三行都将给出自unix纪元以来的毫秒数,这是

  • 由于对java时间的发展以及为什么会有成千上万的相关帖子感到十分困惑,我设法使用jodaTime存储了UTC时间: 因为我使用的是Hibernate(并且不愿意使用JodaTime的适配器来正确处理版本4),所以我只使用这个jodaTime方法将jdk时间转换为utc。这似乎产生了预期的结果,本地时间(当前伦敦格林尼治标准时间1)通过从本地时间减去1来转换为UTC。 目前为止,一切都好。然后,每当

  • 问题内容: 我真的对方法调用的结果感到困惑,因为它返回了IST时间。 这是我使用的代码 我得到的答复是: 所以我尝试将默认的TimeZone更改为UTC,然后检查了一下,然后工作正常 结果: 我在这里想念什么吗? 问题答案: 该调用返回的。正是它将转换为的字符串,并且这种转换将使用您所用的默认时区。 您需要明确使用来在所需的时区中打印。 编辑:@Laurynas的礼貌,请考虑以下事项:

  • 我做了下面的代码,但我知道它是正确的或不是,请协助我做正确的方式时区转换。 我把UTC日期作为json字符串,转换成用户的时区格式,并显示Android端

  • 输入:- 2018-01-19T17:04:54.923Z; 输出:-2018-01-19 17:04:54; 我怎样才能获得在所有浏览器中都能用JAVASCRIPT工作的通用逻辑