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

时区转换器JAVA[副本]

柴飞扬
2023-03-14

我的时区转换器出了故障。我用密码

for (int i = 0; i < data.size(); i++) {
        try {
            String time = (String) data.get(i).get("time_utc_8");
            time = time.replace('+', '-');

            String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX";
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            TimeZone tz = TimeZone.getTimeZone("UTC+8");
            sdf.setTimeZone(tz);
            Date dateTime = sdf.parse(time);

            String pattern_2 = "yyyy-MM-dd HH:mm:ss.SSSSSS";
            SimpleDateFormat sdf_2 = new SimpleDateFormat(pattern_2);
            String d = sdf_2.format(dateTime);

            data.get(i).put("time_utc_8", d);

            // System.out.println(data.get(i).get("time"));

        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但正确的输出必须是:

2016-06-27 00:32:31.654120

我怎样才能解决这个问题?

共有1个答案

鲁建茗
2023-03-14

首先,看一下simpledateformat的javadoc:s模式用于milliseconds字段,其最大值为999。

要将6个数字解析为分数秒,可以使用新的Java.time类(如果使用Java>=8)或ThreeTen后端口(对于Java<=7)--这些新类支持分数秒字段中的3个以上数字。

下面的代码适用于两者,唯一的区别是包名(Java.timeJava.time.format对于Java>=8,或者org.threeten.bporg.threeten.bp.format)。但类和方法的名称是相同的:

// parser (format with 6 digits in fraction of second)
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX");
// parse input, use UTC+8 (ZoneOffset.ofHours(8))
ZonedDateTime dt = ZonedDateTime.parse("2016-06-26T16:32:31.654120+00:00", parser)
    .withZoneSameInstant(ZoneOffset.ofHours(8));

// formatter for output, using your format
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
System.out.println(formatter.format(dt)); // 2016-06-27 00:32:31.654120

输出将是:

2016-06-27 00:32:31.654120

 类似资料:
  • 问题内容: 我需要在项目中从一个时区转换为另一个时区。 我可以从当前时区转换为另一个时区,但不能从另一个时区转换为另一个时区。 例如,我在印度,并且能够使用;将其分配给日历对象并设置时区,将其从印度转换为美国。 但是,我不能从其他时区到另一个时区执行此操作。例如,我在印度,但是在将时区从美国转换为英国时遇到了麻烦。 问题答案: tl; dr 细节 类未分配时区†,但是其toString实现令人困惑

  • 问题内容: 在Java 8中,我想将日期时间从UTC转换为ACST(UTC + 9:30)。 输入-> 2014-09-14T17:00:00 + 00:00 输出-> 2014-09-15 02:30:00 为什么不执行补偿? 问题答案: 尝试: 输出: 使用 虽然通常最好使用上面所示的方法,但是可以使用以下方法执行相同的转换:

  • 我正在尝试使用下面的代码转换当前的UTC时间(来自我的Linux服务器的时间)。 当我执行代码时,我得到以下异常: 我看到正确提取的UTC时间为:05-11-2018 12:55:28,但代码无法将字符串解析为IST(印度标准时间)。我不明白怎样才能解决这个问题。谁能让我知道我在这里犯的错误是什么,我该如何解决它?

  • 问题内容: 我想将此GMT时间戳转换为GMT + 13: 我已经尝试过约100种不同的DateFormat,TimeZone,Date,GregorianCalendar等组合,以尝试执行此非常基本的任务。 这段代码可以满足我在当前时间的需求: 但是我想要的是设置时间而不是使用当前时间。 我发现任何时候我都尝试这样设置时间: 使用本地计算机的TimeZone。这是为什么?我知道,当“ new Da

  • 我有一个日期时间,格式为2019年4月30日星期二16:00:00 0800,这是RFC 2822格式的日期 我需要将其转换为日期时间0800中的给定时区 如果我总结一下, 如何在Java中实现这一点?我已经尝试了下面的代码,但它给出的时间比当前时间短08小时,即

  • 问题内容: 我知道这个主题已被殴打致死,但在搜寻了这个问题几个小时之后,我不得不问。 我的问题:根据客户端应用程序(iphone)的当前时区对服务器上的日期进行计算。客户端应用程序以秒为单位告诉服务器,其时区距GMT的距离。然后,我想使用此信息对服务器中的日期进行计算。服务器上的日期都存储为UTC时间。 因此,在将UTC日期对象转换为该本地时区之后,我想获取其HOUR。 我目前的尝试: 变量小时和