将时区字符串(即美国/东部)转换为偏移量

dbush

我正在寻找一种纯Ruby的方法,该方法采用时区字符串(例如“ US / Eastern”),并将其与时间戳的字符串表示形式一起使用,以转换为带有时区的时间戳。

我到目前为止发现的所有内容都strptime支持短时区名称(如“ EST”)或时区偏移量(如“ -0500”),但不支持完整的时区字符串。

我需要能够将它作为Logstash红宝石过滤器的一部分运行。我有一些JSON,其中包含没有时区的时间戳,如下所示:

{
 "event": {
    "created": "2021-02-15_11-26-29",
  },
  "Accounts": [
    {
      "Name": "operator",
      "Caption": "SERVER\\operator",
      "Domain": "SERVER",
      "PasswordChangeable": "False",
      "PasswordRequired": "True",
      "PasswordExpires": "False",
      "Disabled": "False",
      "Lockout": "False",
      "LocalAccount": "True",
      "FullName": "operator",
      "Status": "OK",
      "LastLogon": "07/08/2020 2:14:13 PM"
    },
    ...
  ]
}

对于event.created字段,我可以使用date过滤器:

    date {
        match => [ "[event][created]", "yyyy-MM-dd_HH-mm-ss" ]
        timezone => "${TIMEZONE}"
        target => "[event][created]"
    }

其中${TIMEZONE}的环境变量包含完整的时区名称,即“ US / Eastern”。但是对于Acounts.LastLogin字段,我无法使用date过滤器,因为它位于可变长度的列表中,因此我不得不求助于ruby过滤器。我能找到的最接近的是:

    ruby {
        code => 'event.get("[Accounts]").each_index {|x|
                    tz = "-0500"
                    last_logon_str = event.get("[Accounts][#{x}][LastLogon]")
                    last_logon = DateTime.strptime(last_logon_str + " " + tz, "%m/%d/%Y %I:%M:%S %p %z")
                    event.set("[users][#{x}][last_logon]", last_logon.strftime("%Y-%m-%dT%H:%M:%S%z"))
                 }'
    }

但这当然是使用硬编码的时区偏移量,而不是包含全名的变量。

Timehttps://ruby-doc.org/core-2.6/Time.html上寻找对象的文档指出,Time可以使用来创建对象timezone

或时区对象:

tz = timezone("Europe/Athens") # Eastern European Time, UTC+2
Time.new(2002, 10, 31, 2, 2, 2, tz) #=> 2002-10-31 02:02:02 +0200

然后可以用来提取偏移量,但是找不到timezone任何地方的引用

处理此问题的最佳方法是什么?

时区是TZInfo类的一部分您需要它。以下代码

    ruby {
        code => '
            require "tzinfo"
            tz = TZInfo::Timezone.get(ENV["TIMEZONE"])
            event.set("offset", tz.observed_utc_offset())
        '
    }

"offset" => -18000,当$ TIMEZONE是“ US / Eastern”时,我会收到

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将时区pytz字符串转换为python / django中的偏移量

接收包括字符串的时区偏移量的日期,并使用该时区转换为其他格式

将具有UTC偏移量的字符串转换为日期时间对象

使用偏移量将字符串日期转换为DateTimePST(String)和DateTimeLocal(String)?

熊猫数据帧日期时间 - 将字符串转换为日期时间偏移量

将时区偏移量“+00:00”转换为分钟

将时区偏移量转换为整数

Python使用时区偏移量转换日期/时间字符串

Java将ISO 8601字符串转换为日期,忽略偏移量

我有一个特定的时间作为字符串(“美国东部时间7:00 PM”)。Joda-Time可以将字符串转换为用户的时区吗?

如何将格式为 'YYYY-DD-MM HH:MI:SS.MS +00:00' 的字符串(其中最后四个字符是时区偏移量)转换为 postgres timestamptz?

转换为缺少的加号偏移量datetime字符串为正确的datetime

如何使用UTC偏移量转换字符串

Java将字符串yyyy-MM-dd HH:mm:ss转换为加拿大/东部时区的时间戳

将带有偏移量的日期字符串转换为忽略偏移量的自定义格式

如何将时区偏移量转换为另一种格式

计算python格式字符串中的时区偏移量

解析包含“ T”和+时区偏移量的日期字符串

将datetime转换为string始终默认为系统时区偏移量,需要在结果中获取用户的时区偏移量

boost spirit X3解析器,可将偏移量转换为原始字符串

在bash Shell脚本中将带有偏移量字符串的GMT转换为MST

如何从时区名称(美国东部标准时间/印度标准时间)获取时区偏移量?

无法将空字符串分配给字符串偏移量

将时间转换为特定时区然后转换为UTC时,如何获取偏移量?C#

无法将字符串解析为具有时区偏移量的时间,其中包含RFC3339带有看似矛盾的错误

使用Glyphter.com将SVG转换为字体时的偏移量-偏移量

将char偏移量转换为单词偏移量的最简单方法

将东部时区转换为 UTC

在PHP中发生了字符串偏移量强制转换的正确解决方案