【问题标题】:How to get the current date time of thailand using C#如何使用 C# 获取泰国的当前日期时间
【发布时间】:2019-06-03 09:00:47
【问题描述】:

我正在使用 Xamarin 表单为泰国创建应用程序。在那里我需要获取泰国的当前日期时间。当我从印度开发应用程序时,我的 api 调用(依赖于日期时间)失败了。我正在尝试获取泰国的当前日期时间。我曾尝试使用文化信息,但它返回我佛教日历中的日期并且时间不正确。我的要求是按照以下格式获取时间。 20190602 15:50:51

【问题讨论】:

  • 查看this微软文档页面
  • 日期没有无格式。它们是二进制值。如果你想处理时区,DateTime 类型是 100% 不合适的。它的值为 UTC 或 Local,其中 Local 表示 whatever the machine's locale was when DateTime.Now was called
  • 即使使用 DateTime.UtcNow 并执行正确的转换,也意味着您获得了一个您不知道它指向哪个时区的值。
  • 最好使用包含时区偏移量的DateTimeOffset 类型。这意味着您始终知道该值指的是什么。您可以在客户端格式化此值,使用ToOffset 将其转换为不同的时区
  • 根据我的要求,我需要按照泰国时区的时间。

标签: c# datetime thai


【解决方案1】:
var info = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time");
DateTimeOffset localServerTime = DateTimeOffset.Now;
DateTimeOffset localTime = TimeZoneInfo.ConvertTime(localServerTime, info);

然后根据需要格式化

【讨论】:

    【解决方案2】:

    根据thisthis Microsoft 文档文章,它应该可以工作

    var now = DateTime.UtcNow;
    try
    {
       var thaiZone = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time");
       var thaiTime = TimeZoneInfo.ConvertTimeFromUtc(now, thaiZone);
       Console.WriteLine("The date and time in SE Asia Standard Time is {0} {1}", thaiTime, thaiZone.IsDaylightSavingTime(thaiTime) ? thaiZone.DaylightName : thaiZone.StandardName);
    }
    catch (TimeZoneNotFoundException)
    {
       Console.WriteLine("The registry does not define the SE Asia Standard Time zone.");
    }                           
    catch (InvalidTimeZoneException)
    {
       Console.WriteLine("Registry data on the SE Asia Standard Time zone has been corrupted.");
    }
    

    thaiTime 是泰国的当前时间(东南亚标准时间)

    【讨论】:

    • 试过这个。但是在 Android 中得到 TimeZoneNotFoundException。你能帮忙吗?
    【解决方案3】:

    有两种不同的时区标准(嗯,不是真正的标准,而是事实上的实现):

    • Microsoft Windows 时区数据。泰国的标识符是"SE Asia Standard Time"

    • IANA time zone database。泰国的标识符是"Asia/Bangkok"

    TimeZoneInfo 对象使用由运行它的操作系统定义的时区,因此方法名称为TimeZoneInfo.FindSystemTimeZoneById。由于您在 Android 而不是 Windows 上运行,因此您的操作系统可能会使用 IANA ID:

    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Asia/Bangkok");
    DateTime nowInThailand = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);
    

    最后,如果您需要编写跨平台的代码,请考虑使用我的TimeZoneConverter 库。

    TimeZoneInfo tz = TimeZoneConverter.TZConvert.GetTimeTimeZoneInfo("Asia/Bangkok");
    DateTime nowInThailand = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);
    

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 1970-01-01
      • 2011-10-18
      • 2020-01-09
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多