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

iso_date_time.format()转换为具有可选偏移量的LocalDateTime

罗烨霖
2023-03-14

我正在尝试将ISO日期时间隐藏到LocalDateTime:

String timezone = "Pacific/Apia";
String isoDateTime = "2011-12-03T10:15:30+03:00";
var zoned = ZonedDateTime.from(ISO_DATE_TIME_FORMATTER.parse(isoDateTime));
return zoned.withZoneSameInstant(ZoneId.of(timeZone)).toLocalDateTime();

这段代码起作用--它将它转换为localdate(包括offset)。但问题是当我通过日期没有偏移:2011-12-03T10:15:30-

我知道为什么我有这个例外,问题是如何将包括偏移量在内的两个日期转换为LocalDateTime?。我想避免一些字符串解析(检查字符串是否包含'+'/'-')。

共有1个答案

甄德寿
2023-03-14

您可以构建一个带有可选offset元素的解析器,并使用TemporalAccessor.isSupported检查是否存在偏移量。

    DateTimeFormatter parser = new DateTimeFormatterBuilder()
        .parseCaseInsensitive()
        .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
        .optionalStart()
        .appendOffsetId()
        .optionalEnd()
        .toFormatter();

    TemporalAccessor accessor = parser.parse(isoDateTime);
    if (accessor.isSupported(ChronoField.OFFSET_SECONDS)) {
        var zoned = ZonedDateTime.from(accessor);
        return zoned.withZoneSameInstant(ZoneId.of(timezone)).toLocalDateTime();
    }
    return LocalDateTime.from(accessor);
 类似资料:
  • 问题内容: 我需要在查询中将DATE值转换为带时区的TIMESTAMP,但目前我正在获取不能被EF使用的时区(欧洲/巴黎)。 例如,执行此操作时: 我目前得到此输出: 但我需要像这样: 任何想法如何做到这一点? 问题答案: 您可以将转换为,然后使用将此时间戳转换为具有时区的时间戳:

  • 我试图弄清楚如何将LocalDateTime转换为偏移量为0的Date对象。 我使用的将LocalDateTime转换为日期的当前代码是: LocalDateTime: 转换到日期后: 是的,我看到有一个区域偏移量被传递到Instant中,但我不确定如何做我所要求的。

  • 当我这样创作的时候: 一切都工作得很好,但我尽量避免转换。是否可以通过只使用对象来实现这一点?

  • 问题内容: 给定以下字符串:如何将其转换为对象? 阅读后,我觉得这应该可以,但是不行。 应该注意的是,这没有问题: 但是我坚持下去。我宁愿完全转换它,而不以任何方式更改(或切片)它。 问题答案: 看起来strptime并不总是支持。Python似乎只是调用C函数,而您平台上不支持strptime 。 注意: 从Python 3.2开始,它将始终有效。

  • 问题内容: 为您准备的头抓板。 我正在从IPInfoDB的API中获取地理IP数据,它从UTC返回 包括 DST 的时区偏移(如果当前已反映)。 例如,我住在EST(-5),目前是DST,因此geo IP API返回()作为偏移量。 因为DST令人头疼,所以这太好了。但是令我惊讶的是,它又引起了头疼。 我将此数据加载到PHP中,以通过AJAX传递给应用程序。我想在应用程序上获取IP地址的实时本地时

  • 我有一个格式为“2019-04-25T16:34:28-05:00”的字符串。我已经通过模式“yyyy-mm-dd't'hh:mm:ssz”通过joda-time解析了字符串。 它在DateTime中给出的输出是“2019-04-25t15:34:28.000-06:00”。