使用 Powershell 将字符串转换为特定时区的 DateTime 对象

2024-03-15

由于我对 Powershell 的了解有限,我试图将当前的字符串转换为:

2020-01-23 10:06:07

时区中的日期时间对象Eastern Standard Time。最终我希望能够使用与 UTC 的正确偏移量格式化为 ISO8601 标准。

20-01-23T10:06:07-05:00

这可以在 powershell 中实现吗?我看过ConvertTimeFromUtc然而,我很难最初指定时区是东部标准时间而不是格林尼治标准时间。


处理给定的nominal日期(即未指定关于什么时区它涉及)作为 EST(美国东部标准时间)时区之一:

也就是说,转换日期字符串,例如'2020-01-24 03:00:57'进入 A[datetimeoffset]实例,将这个未指定的时区字符串表示为 EST(东部标准时间)时区本地的日期/时间(可能应用了 DST(夏令时)偏移量),然后可以将其表示为采用 ISO 8601 格式进行格式化,其中包括结果日期的特定 UTC 偏移量。

# Construct a nominal [datetime] instance whose .Kind property value is
# Unspecified (which means unspecified with respect to any particular
# time zone), which a cast from a string achieves:
$nominalDate = [datetime] '2020-01-24 03:00:57'

# Determine the target time zone.
# Note: On macOS and Linux, use 'America/New_York' (ICU library IDs).
$tz = [TimeZoneInfo]::FindSystemTimeZoneById('Eastern Standard Time')

# Get the UTC offset for the nominal date (.Kind == Unspecified), 
# which is interpreted as local to that time zone.
# The offset is returned as a [timespan] instance that properly reflects
# DST, if the date falls into the DST window of the target time zone.
# If the input date is ambiguous or invalid, standard time is assumed.
$utcOffset = $tz.GetUtcOffset($nominalDate)

# Construct a [datetimeoffset] instance with the UTC offset determined above.
# This in effect creates a date that represents the nominal date in the 
# target time zone, using that time zone's DST-appropriate UTC offset.
$dto = [DateTimeOffset]::new($nominalDate.Ticks, $utcOffset)

# Format according to ISO 8601 with UTC offset, but remove the
# fractional-seconds part:
# Note: With the standar "o" format specifier, only [datetimeoffset]
#       instances include their UTC offset in the resulting string,
#       not [datetime] instances.
$dto.ToString('o') -replace '\.\d+(?=-)'

以上产量'2020-01-24T03:00:57-05:00', 如预期的。

使用 DST 窗口输入日期,例如'2020-07-24 03:00:57',它会产生
'2020-07-24T03:00:57-04:00'- 请注意 UTC 偏移量现在减少了一小时。

另请参阅:System.DateTime https://learn.microsoft.com/en-US/dotnet/api/System.DateTime ([datetime],作为 PowerShell 类型文字),System.DateTimeOffset https://learn.microsoft.com/en-US/dotnet/api/System.DateTimeOffset ([datetimeoffset]), and System.TimeZoneInfo https://learn.microsoft.com/en-US/dotnet/api/System.TimeZoneInfo ([TimeZoneInfo]) 类型,以及标准日期和时间格式字符串 https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings


以下是具有不同前提的相关用例:

翻译给定的local日期转换为 EST 等效项:

也就是说,翻译本地时间点,例如通过Get-Date,转换为 EST 时区的等效时间。

# Start with a local date, in any time zone.
# (A [datetime] instance whose .Kind property value is Local, though
#  Unspecified would work the same).
# Alternatively, start with a UTC date (where .Kind is UTC)
$localDate = Get-Date

# Translate it to Eastern Standard time, as a [datetimeoffset] instance.
# Note: Casting $localDate to [datetimeoffset] is crucial to ensure
#       that a [datetimeoffset] with the proper UTC offset is returned.
#       Without it, you'd get a [datetime] instance that is nominally
#       the correct time, but has an Unspecified .Kind value.
#       Also, only a [datetimeoffset] instance includes a UTC offset
#       when stringified with format string 'o'
$dtoEST = [TimeZoneInfo]::ConvertTimeBySystemTimeZoneId(
  [datetimeoffset] $localDate, 
  'Eastern Standard Time'
)

# Format according to ISO 8601 with UTC offset, but remove the
# fractional-seconds part:
$dtoEST.ToString('o') -replace '\.\d+(?=-)'

上面生成一个字符串,例如'2020-01-23T16:44:41-05:00'.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Powershell 将字符串转换为特定时区的 DateTime 对象 的相关文章

  • 通过快捷方式更改桌面的 Powershell 脚本

    关于为什么从 w in PS 运行时有效 但从定义为以下的快捷方式运行时无效的任何想法和建议 SystemRoot system32 WindowsPowerShell v1 0 powershell exe File C Users bi
  • 我可以在 Emacs 的 shell 模式下使用 PowerShell 吗?

    我可以在 emacs 的 shell 模式下使用 powershell 作为 shell 吗 How 请参阅 Jeffrey Snover 的博客文章在 Emacs 内运行的 PowerShell http blogs msdn com p
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 隐藏powershell输出

    我有以下脚本 param 参数 强制 true 字符串 dest New Item force path dest 1 itemtype directory New Item force path dest 2 itemtype direc
  • 拖放到 Powershell 脚本

    我以为我已经找到了这个问题的答案 但我玩得越多 我就越发现它是 Powershell 的设计缺陷 我想拖放 或使用发送到机制 将多个文件和 或文件夹作为数组传递到 Powershell 脚本 测试脚本 Test ps1 param stri
  • “Microsoft.AspNet.Server.Kestrel”不包含适合入口点的静态“Main”方法

    我正在尝试运行最新的Asp Net 5 个示例 https github com aspnet Home 当前为 1 0 0 rc1 update1 来自 Windows 10 上的 powershell 我将活动和默认 DNX 设置为 C
  • 为管道重用自定义对象时出现意外结果

    A while ago I changed my Join Object https stackoverflow com a 45483110 1701026 cmdlet which appeared to cause a bug whi
  • 全局变量用例

    我有几个脚本和模块 它们使用全局变量来完成很多事情 我的日志记录可以采用以下三种形式之一 简洁 详细和验证 没有实际操作的详细日志记录 仅验证提供的数据 我还有许多函数 它们根据运行的上下文 用户或机器 而做出不同的响应 并且正在执行的操作
  • SQL Server:删除除系统数据库之外的所有数据库

    在 PowerShell 中 我使用以下代码删除所有非系统 SQL Server 数据库 invoke sqlcmd ServerInstance sqlInstanceName U sqlUser P sqlPass Query EXEC
  • Powershell 数组到带引号的逗号分隔字符串

    我有一个数组 需要输出到逗号分隔的字符串 但我还需要引号 这是我所拥有的 myArray file1 csv file2 csv a myArray join a 输出为 a最终 file1 csv file2 csv 我想要的输出是 fi
  • Powershell:根据属性过滤属性

    我对 PowerShell 的自学经验有限 所以这可能是一些基本的东西 但我似乎无法正确理解 我在 Active Directory 中 需要提取电子邮件地址不以 SamAccountName 开头的用户列表 因此 如果您的登录名是 jdo
  • Powershell 查询的升序和降序

    下面的查询将列出 powershell 中的 cmdlet get command CommandType cmdlet Group Object Property verb 因为我需要按降序对列数进行排序 然后按升序对列进行命名 以下查询
  • 如何使用 PowerShell 2 的导出 csv 附加文件?

    filesremoved export csv Path E Code powershell logs filesremoved txt NoTypeInformation 我也尝试过 filesremoved export csv Pat
  • 带有多个附件的电子邮件

    我正在为服务台编写一个 PowerShell 脚本 以便在将 userhome 文件夹从服务器迁移到 NAS 设备时使用 帮助台用户将用户名输入到 userhomelist txt 文件中 我的问题是我无法获取脚本来附加所有日志文件 电子邮
  • Powershell 中的“$”是什么?

    是什么意思 在 Powershell 中 Edit TechNet 答案 http technet microsoft com en us library hh847768 aspx同义反复 没有解释 成功 或 失败 的含义 包含上次操作的
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu
  • Get-AzureDomain、GetAzureADUser 等返回 Authentication_Unauthorized、未找到用户

    我能够使用 PowerShell 对我创建的 我是全局管理员的 Azure AD 资源进行身份验证 我执行此命令以通过 AD 进行身份验证 AzureADCred Get Credential Message Cred to connect
  • 如何使用卸载路径卸载 MSI

    我正在尝试获取一组应用程序的卸载路径并卸载它们 到目前为止 我得到了卸载路径列表 但我很难真正卸载这些程序 到目前为止我的代码是 app msi1 msi2 msi3 msi4 Regpath HKLM Software Microsoft
  • 无法索引空数组

    我正在使用一个模板 该模板根据服务器备份是否成功的条件设置单元格颜色 我有下面的代码 它不断抛出错误 无法索引到空数组 Cannot index into a null array At C Users admin Desktop new
  • 获取在特定日期之后修改的一组文件

    有没有人有一个方便的 powershell 脚本根据修改日期从 TFS 获取一组文件 我想说 给我这个文件夹 或子文件夹 中在 X Y ZZZZ 之后修改的所有文件 并将这些文件转储到它们通常所在的文件夹之外的文件夹中 我知道足够的 pow

随机推荐

  • 使用 ccTouchesMoved 方法移动 CCCamera? (cocos2d、iPhone)

    所以我得到了这个工作 void ccTouchesMoved NSSet touches withEvent UIEvent event UITouch myTouch touches anyObject CGPoint location
  • 双向数据绑定不更新 UI

    我试图理解为什么设置值不会自动刷新用户界面 如果我调用 binding setItem UI 就会刷新 我知道绑定对象包含更新的值 但在设置 item name 和 item checked 后 UI 没有刷新 我究竟做错了什么 我需要每次
  • 如何在flutter中显示全屏图像

    有什么办法可以显示全屏图像吗 var imagejadwal new Image network https firebasestorage googleapis com v0 b c smp bruder appspot com o fo
  • yii:使用查询生成器选择总和

    我尝试执行一个简单的查询 如下所示 tot Yii app gt db gt createCommand gt select sum field gt from products gt where id id gt queryRow 但 t
  • Gradle 依赖项 - 最新快照

    我有一个 gradle 多项目构建 在一个项目中 我定义了对其他 JAR 的一些依赖项 并使用 始终依赖于 JAR 的最新版本 例如 runtime group com app name core version 这非常有效 每当我重新构建
  • jQuery:.ready() 和 .ajaxComplete

    我希望我的 JS 的某些部分在文档准备好或 ajax 查询完成时初始化像这样的东西 if document ready or document ajaxComplete do something 这样的条件可以写吗 我该如何做才正确呢 你可
  • C 中的快速 2D 卷积

    我正在尝试用 Python 实现卷积神经网络 最初 我使用 scipy signal 的 convolve2d 函数来进行卷积 但它有很多开销 而且用 C 实现我自己的算法并从 python 调用它会更快 因为我知道我的输入是什么样的 我实
  • 由于Android 6.0监听PhoneStateListener.LISTEN_DATA_CONNECTION_STATE的变化似乎不再需要READ_PHONE_STATE权限

    我正在将 Android 6 0 运行时权限应用到一个应用程序中 该应用程序侦听运营商数据连接状态更改 我首先尝试从清单中删除 READ PHONE STATE 以检查应用程序需要权限的位置 令我惊讶的是 该应用程序根本没有崩溃 此后 我在
  • OAuth 授权码何时到期?

    我知道 在 OAuth 中使用授权代码 授权代码 时 访问令牌的生命周期应该很短 但刷新令牌的生命周期可以很长 所以我为我的项目决定 访问令牌生命周期 1 天 刷新令牌生命周期 30 天 但授权码的典型生命周期是多长 我认为它应该非常非常短
  • go中如何连接Oracle

    我认为有两种方法可以在 Go 中连接到 Oracle DB 在 Windows 上 github com tgulacsi goracle github com mattn go oci8 但对于我这个水平的人 开源 golang的初学者
  • Liferay DLFileEntryLocalServiceUtil.addFileEntry 不创建 AssetEntry 记录

    我有一个自定义 portlet 它提供了一个用户可以上传文件的表单 上传的文件应存储在文档和媒体 Portlet 中 我正在使用创建文件条目DLFileEntryLocalServiceUtil addFileEntry 文件上传成功 记录
  • NSTask、命令行工具和 root

    我正在开发一个需要使用 dd 的应用程序 我使用应用程序包中的 shell 脚本来执行此操作 该脚本从应用程序本身收集参数 进行一些检查 然后启动 dd 为了进行此操作 我需要使用 root 调用 dd 并且我已经在 StackOverfl
  • iPhone 中社交网络与 OAuth 的集成

    我是 iPhone 编程新手 有人可以解释一下什么是 OAuth 以及它如何在社交网络集成中使用吗 有多少社交网站提供 API Use ShareKit http getsharekit com
  • 如果行包含重复数据,如何突出显示?

    我有以下数据 id number colour 1766 53 red 1767 3 green 1768 202 green 1769 52 blue
  • 查找最深子树节点的级别

    我有树节点 我想找到树节点中最深的子节点 如果有 2 个子节点level 11 level 13分别然后我需要函数返回值13 我怎样才能做到这一点 public int FindLevel TreeNode oParentNode coun
  • 获取 std::function 的名称

    在下面的玩具示例中 我想获取函数的名称 该函数本身被给出为std function争论 在C 中是否可以获取a的名称std function object void printName std function
  • 重新分配变体

    只是为了定位上下文 它是关于一个字符串池 意味着一个带有字符串键的哈希表 实际上是知道其长度的特殊字符串 但我想这个细节在这里无关紧要 重点是当池需要增长时调整列表数组 用作表桶 的大小 但是 这是核心细节 包含字符串的单元格实际上位于单元
  • 如何在代码中向 ActionBar 操作添加子菜单项?

    通过 xml 我可以将子菜单项添加到我的操作中ActionBar main menu xml menu menu
  • BizTalk 2009 上的意外绑定重置

    我在 BizTalk 2009 上使用了许多应用程序 我多次注意到 在随机应用程序中添加资源 dll 后 精确应用程序的所有绑定 自定义管道 都会完全重置为之前的早期状态 我真的很好奇为什么会发生这种情况 但我还需要一个解决方案来阻止该行为
  • 使用 Powershell 将字符串转换为特定时区的 DateTime 对象

    由于我对 Powershell 的了解有限 我试图将当前的字符串转换为 2020 01 23 10 06 07 时区中的日期时间对象Eastern Standard Time 最终我希望能够使用与 UTC 的正确偏移量格式化为 ISO860