如何确定现在(UTC)是否在 ISO 8601 格式的给定星期几和一天中时间的范围内

2024-05-02

我遇到了如何确定是否DateTime.UtcNow(例如 2018-01-01T20:00:00Z)属于另一个时区的给定日期和时间范围内。没有给出具体日期,只是一周中的几天和一天中的时间。给定时间采用 ISO 8601 标准格式。

为了简化这个问题,可以是如何检查UTC时间是否在中国的工作时间内。

例如,给定的日期和时间范围是由中国人给出的时区+08:00,它可以是:FromDayOfWeek = "Friday", FromTimeOfDay = "17:00:00+8:00", ToDayOfWeek = "Monday", ToTimeOfWeek = "08:00:00+8:00".我需要确定中国的“现在”是否在给定范围(星期五 17:00:00+8:00 - 星期一 08:00:00+8:00)之间的某个时间。

我陷入了如何转换 DateTime 并获取当地时间的星期几的问题,因为 2018-01-01T20:00:00Z 在英国是星期一,但同时,因为中国是 +08:00 ,在中国已经是星期二了。

我的做法:

// parse the time to get the zone first (+08:00)
TimeSpan ts = TimeSpan.Parse("-08:00");

// Create a custom time zone since the time zone id is not given, and cannot be searched by SearchTimeZoneById
TimeZoneInfo tzi = TimeZoneInfo.CreateCustomTimeZone(zoneId, ts, displayName, standardName);
DateTime localDateTime = TimeZoneInfo.ConvertTime(Date.UtcNow, tzi);

String localDay = localDateTime.DayOfWeek;

// Determine if localDay is between FromDayOfWeek and ToDayOfWeek
// cast the days to integers from 1 (Monday) to 7 (Sunday)  
// create an array of days in integar days = [5, 6, 7, 1]
// if days.contains(localDays), check the times
...

谁能提出一些更好的解决方案?我不确定我的是否有效,并且在如何处理夏令时(因为区域会改变)以及如何检查时间范围方面存在漏洞。我是 C# 新手,任何我可以使用的库的建议都很棒!


无需将开始时间和结束时间都从 UTC 转换,只需将另一个时间转换为 UTC

    TimeZoneInfo chinaTimeZone = TimeZoneInfo.CreateCustomTimeZone(zoneID, TimeSpan.Parse("-08:00"), displayName, standardName);

    DateTime FromTime = new DateTime(2018, 0, 19, 13, 0, 0); // year, month, day, hour, minute, second : Friday 1pm
    DateTime ToTime = new DateTime(2018, 0, 21, 1, 0, 0); // year, month, day, hour, minute, second : Monday 1am

    DateTime nowinUTC = DateTime.UtcNow;
    DateTime nowInChina = TimeZoneInfo.ConvertTimeFromUtc(nowinUTC, chinaTimeZone);

    if(FromTime< nowInChina && ToTime> nowInChina)
    {
        // Time is within the from and two times
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定现在(UTC)是否在 ISO 8601 格式的给定星期几和一天中时间的范围内 的相关文章

随机推荐

  • Apache CXF - WS 解决如何设置 From、ReplyTo、Headers

    我有一个问题 我们正在尝试使用 Apache CXF 实现 WS Addressing 我可以设置一些标头 例如 To 或 Action 但我找不到设置其他标头 例如 From ReplyTo 或 FaultTo 的方法 有人知道该怎么做吗
  • 在Python中解析空选项

    我有一个应用程序 允许您将事件数据发送到自定义脚本 您只需布置命令行参数并指定什么事件数据与什么参数相匹配 问题是这里没有真正的灵活性 您制定的每个选项都将被使用 但并非每个选项都必须有数据 因此 当应用程序构建要发送到脚本的字符串时 某些
  • height: calc(100%) 在 CSS 中无法正常工作

    我有一个 div 我想填充主体的整个高度减去设定的像素数 但我无法得到height calc 100 50px 上班 我想这样做的原因是我有一些元素具有基于一些不同标准的动态高度 例如标题的高度根据它可以包含的不同元素而变化 然后 内容 d
  • ANSI 转义码无法正确显示

    我有以下定义 define ANSI COLOR RED e 31m define ANSI COLOR GREEN e 32m define ANSI COLOR YELLOW e 33m define ANSI COLOR BLUE e
  • SQL Server - 评估期已过期错误

    昨天我的电脑上安装的 SQL Server 2014 试用期结束了 我决定使用 Express 版本并卸载 SQL Server 2014 并安装 Express 版本 但是当我打开SQL Server Management Studio时
  • 如何从网络客户端获取状态码?

    我正在使用WebClient类将一些数据发布到 Web 表单 我想获取表单提交的响应状态代码 到目前为止我已经找到了如果出现异常如何获取状态代码 Catch wex As WebException If TypeOf wex Respons
  • 如何使用 Angular2 数据表

    找不到任何使用教程angular2 data table图书馆在这里 https github com swimlane angular2 data table https github com swimlane angular2 data
  • 传递到 mvn exec:java 时保留参数间距等

    我有一个启动 Maven exec java 进程的 shell 脚本 exec mvn exec java Dexec mainClass Dexec args 现在可悲的是如果我跑步 myMagicShellScript arg1 ar
  • 比较字符串结尾的最佳方法是使用 RIGHT、LIKE 还是其他?

    我需要将字符串的结尾与存储过程中可能的结尾列表进行比较 会被叫很多 大概有10 15个候选结局 此时 仅使用代码的解决方案比创建专用于此的表更好 类似的东西 IF ENDSWITH var foo OR ENDSWITH var bar O
  • Android 支持 React Native 的 LayoutAnimation 吗?

    我没有看到文档中的任何内容 https facebook github io react native docs layoutanimation html指的是缺乏对Android的支持 我正在使用一个简单的预设动画 LayoutAnima
  • 如何使用 AVFoundation 组合不同方向的视频剪辑

    我正在尝试使用 AVFoundation 将多个视频剪辑合并为一个 我可以使用下面的代码使用 AVMutableComposition 创建单个视频 AVMutableComposition composition AVMutableCom
  • SpringBoot @OneToMany 与 Lombok 无限循环

    我的项目使用SpringBoot 它具有双向映射 OneToMany Entity Table name T S Getter Setter EqualsAndHashCode NoArgsConstructor AllArgsConstr
  • Hibernate中通过ID获取对象

    我注意到我们的高级开发人员使用以下代码通过 ID 检索实体 Override public Source get Long id Session session getSession if session null session sess
  • 将数组分成两半,数组总和相等或近似相等

    Problem 具有数值的数组需要分成两半 数组总和大约相等或可能相等 数组中元素的数量或顺序并不重要 probabilites array 0 4 0 15 0 1 0 1 0 2 0 2 0 3 1 45 probabilites 0
  • Stopwatch.ElapsedTicks 线程安全吗?

    如果我有一个共享的System Diagnostics Stopwatch实例 可以多线程调用shared ElapsedTicks以安全的方式并获得准确的结果 以这种方式使用 Stopwatch 的共享实例与使用静态GetTimeStam
  • Foldl 是否比其严格的表亲 Foldl' 更好?

    Haskell 有两个列表左折叠函数 foldl 以及 严格 版本 foldl 不严格的问题foldl是它建造了一座重击塔 foldl 0 1 5 gt 0 1 2 3 4 5 gt 15 这会浪费内存 并且如果列表中的项太多 可能会导致堆
  • 如何检查 flutter web 应用程序中的元素。如何在 Flutter Web 应用程序中进行自动化测试

    在此输入图像描述 https i stack imgur com SN4rr png 我正在尝试检查元素 但它没有响应 任何人都可以建议如何在 flutter web 应用程序中进行自动化测试 或者 建议任何其他测试工具支持 flutter
  • 自动执行将制表符分隔文件中的值乘以 -1 来求反的过程

    我一直在 Excel 中手动处理大量文件 我已经进行了一些搜索 但还没有找到关于如何以自动化方式实现此过程的明确最佳实践 我的手动流程如下 我有一个 tab 制表符分隔 文件 每行总共有 8 个 列 我需要对每行最后 5 列的数值求负 我一
  • 使用 ActionBar 选项卡进行导航时菜单会折叠

    我已经使用支持库中的 ActionBar 来将我的应用程序构建为选项卡式导航栏 我的应用程序中有两个选项卡 这两个片段都有菜单 并且有一个菜单项 我想将其显示为操作栏中的一项操作 但由于某种原因 显示了溢出图标 而不是分配给这些项目的图标
  • 如何确定现在(UTC)是否在 ISO 8601 格式的给定星期几和一天中时间的范围内

    我遇到了如何确定是否DateTime UtcNow 例如 2018 01 01T20 00 00Z 属于另一个时区的给定日期和时间范围内 没有给出具体日期 只是一周中的几天和一天中的时间 给定时间采用 ISO 8601 标准格式 为了简化这