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

将字符串时间戳解析为即时抛出不受支持的字段:即时秒

钮善
2023-03-14

我正在尝试将字符串转换为即时。你能帮我吗?

我得到以下例外:

原因:java.time.temporal.UnsupportedTemporalTypeException:不支持的字段:java.time.format.Parsed.getLong(Parsed.java:203)java.time.Instant.from(Instant.java:373)

我的代码看起来基本上是这样的

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
Instant result = Instant.from(temporalAccessor);

我用的是Java 8 Update 72。

共有3个答案

卜盛
2023-03-14

我编写了这样一个简单的函数来执行转换:

import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.time.ZonedDateTime;
import java.time.Instant;
import java.sql.Timestamp;


public class SqlTimestampParser {

public static Timestamp parseTimestamp(String dateTime, String format) throws Exception {
    if (format == null || format.trim().length() == 0) {
        throw new Exception("No format defined!");
    }
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
    ZonedDateTime timed = ZonedDateTime.parse(dateTime, formatter);
    timed.format(formatter);
    Instant x = Instant.from(timed);
    return Timestamp.from(x);
}
}

使用示例:

SqlTimestampParser.parseTimestamp('2020-09-17 16:20:35.294000+00:00',"yyyy-MM-dd HH:mm:ss.SSSSSSXXX") 
白芷阳
2023-03-14

下面是如何获得一个带有默认时区的即时消息。您的字符串无法直接解析为Instant,因为缺少时区。所以你总是可以得到默认的

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
Instant result = Instant.from(zonedDateTime);
乌俊健
2023-03-14

一种更简单的方法是在声明格式化程序对象时将默认时区添加到格式化程序对象

final DateTimeFormatter formatter = DateTimeFormatter
                                    .ofPattern("yyyy-MM-dd HH:mm:ss")
                                    .withZone(ZoneId.systemDefault());
Instant result = Instant.from(formatter.parse(timestamp));
 类似资料:
  • 问题内容: 我需要将持续时间字符串解析为毫秒形式。 我希望像这样的持续时间相等,但是我什么也找不到。有人会建议为此目的使用或支持SDF吗? 我目前的计划是使用正则表达式来匹配数字并做类似的事情 然后使用TimeUnit将它们放在一起并转换为毫秒。 我想我的问题是,这似乎有点过头了,它可以轻松完成吗?出现了很多有关日期和时间戳的问题,但这也许有些不同。 问题答案: 使用a 是一种合理的方法。但是,为

  • 问题内容: 我遇到了将“星期几”字符串转换为值的问题。我找不到包中内置的任何内容。 然后,我编写了这个简单的函数(满足了我的需求): 还有其他 建议 或 更惯用的 方式在Golang中执行此转换吗? 谢谢! 问题答案: 前言: 我在中发布了此实用程序,请参见。 是的,使用映射而不是数组,因此查找更快,更简单: 测试它: 输出(在Go Playgorund上尝试): 小费: 您甚至可以使用循环来安全

  • 我有一个字符串时间格式。我没有找到任何格式来解析这个字符串值。有没有办法将这个字符串值转换为Gotime.Time? 编辑 - 这不是重复的问题。我知道如何解析,但我不知道我们可以使用时间格式包中列出的任何布局。这个答案清除了我的涂鸦。

  • 我试图使用新的Java8time-API和一个模式将即时格式化为字符串: 使用上面的代码,我得到了一个异常,它抱怨一个不受支持的字段:

  • 问题内容: 我正在开发一个具有聚类列的时间序列数据模型,即 我希望针对分区列“ id”和集群列“ time”执行选择。例如,id:=‘1’,时间戳:=‘2017-10-09’ 检查iterable.Close()的err后,发现编组错误 {“错误”:[“无法将字符串编组为时间戳”]} 我该如何解决? 问题答案: 这是我最后通过将字符串文字(带有时间戳)转换为类型time来解决此问题的方法。

  • 问题内容: 我有一个要求,我要获取两个ISO 8601时间戳格式的字符串,并且必须对其进行比较并获取它们的最大时间戳。字符串采用以下格式。 为了进行比较,我需要将它们转换为DB2时间戳,然后进行比较。问题出在“ T”和“ Z”字母上。因此,我无法施展。我知道我可以简单地 将T和Z进行转换,但是我想知道是否有更好的方法。 我尝试了以下功能,但无法获得所需的结果。 使用DB2 LUW v9.7 问题答