首页 > 编程语言 >C# 多语言环境下获取时区列表

C# 多语言环境下获取时区列表

时间:2023-09-08 18:12:01浏览次数:47  
标签:languageCode return cultureInfo C# JObject 列表 获取 displayNames var

如果不需要在A语言下获取B语言的时区列表,可以使用C#自带的

var systemZones = TimeZoneInfo.GetSystemTimeZones();

如果需要在A语言下获取B语言的时区列表,尝试过设置当前进程,线程的Culture是没办法实现的

var cultureInfo = new CultureInfo("en_US");
CultureInfo.CurrentCulture = cultureInfo;
CultureInfo.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
var systemZones = TimeZoneInfo.GetSystemTimeZones();

可以引入TimeZoneNames和TimerZoneConverter的Nuget包

var dictionary = TZNames.GetDisplayNames("en_US");

可以反射查看该Nuget的实现,实际上是引入了一个json的资源文件进行解析,如果把该资源文件拿出来自己进行获取  

var filePath = @"Zones\TimeZoneNames.data.json";
var languageCode = "zh_CN";
languageCode = languageCode.Replace("-", "_");
if (!File.Exists(filePath)) return;
using StreamReader file = File.OpenText(filePath);
var jsonContent = file.ReadToEnd();
JObject jsonObject = JObject.Parse(jsonContent);
var displayNames = jsonObject["DisplayNames"];
if (displayNames == null) return;
var containsKey = ((JObject)displayNames).ContainsKey(languageCode);
if (!containsKey)
{
    if (!languageCode.Contains('_')) return;
    var code = languageCode.Split('_');
    var containsCode = ((JObject)displayNames).ContainsKey(code[0]);
    if (!containsCode) return;
    languageCode = code[0];
}

var jToken = displayNames[languageCode];
var jEnumerable = jToken.Children();
foreach (var child in jEnumerable)
{
    if (child is JProperty property)
    {
        // 获取子元素的键和值
        string key = property.Name;
        string val = property.Value.ToString();
    }
}

 

标签:languageCode,return,cultureInfo,C#,JObject,列表,获取,displayNames,var
From: https://www.cnblogs.com/log9527blog/p/17688265.html

相关文章

  • mupdf实用操作demo,C++操作PDF文件
    前文:最近有个项目,需要读写PDF,本来想着挺简单的,读写PDF有那么多的库可以使用,唰唰的就完成了。忘记了我写C++的,还是在国产系统上开发的。所以一般的东西还不好使,因为项目需要在多个架构的电脑上使用,所以必须要开源,还要支持读写才行。 找了很多个PDF库(libharu、mupdf、pdfium、......
  • 什么是Scrum?如何实施Scrum(敏捷开发)以及敏捷工具
    ​什么是Scrum?Scrum是一个敏捷开发框架,它是一个增量的、迭代的开发过程。它被广泛应用于敏捷软件开发,在Scrum中,开发过程由若干个短的迭代周期组成,每个迭代周期称为一个Sprint。那么Scrum如何实施呢?Scrum实施过程可分为以下步骤:1、确定ProductBacklog(产品需求池)。由PO(产品负责......
  • fastjson_1.2.24_unserializer_rce
    目录fastjson1.2.24反序列化导致任意命令执行漏洞1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证1.5、深度利用1、GetShell1.6、修复建议fastjson1.2.24反序列化导致任意命令执行漏洞说明内容漏洞编号漏洞名称fastj......
  • [macOS] 打开应用的多个实例
    TryingtousetheFindertoopenmultipleinstancesofanapplicationonMacOSXwillsimplycausethefirstinstancetocometotheforeground.Togetaroundthis,usethe open commandfromthecommandlinewiththe -n option.The -n optionopensane......
  • oracle导出导入数据库
    先捋一下oracle的概念oracle的概念稍微有点复杂:用户账号和表空间绑定,表空间分为永久表空间和临时表空间,通过表空间设置数据库的大小等参数,在表空间里面进行新建数据表等操作,oracle的表空间等同于mysql的数据库tnsname里面的server是oracle服务端的连接配置,是用来连接数据库的......
  • Fastjson_1.2.47_rce
    目录Fastjson_1.2.47_rce1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证1.5、深度利用1、反弹Shell1.6、修复建议Fastjson_1.2.47_rce说明内容漏洞编号漏洞名称Fastjson_1.2.47_远程执行漏洞漏洞评级影响范围......
  • 制图软件AutoCAD 2024 win+Mac(支持M芯片的CAD)
    AutoCAD2024是Autodesk公司开发的一款专业制图软件,它具有强大的2D和3D设计和制图功能,被广泛应用于机械、建筑、土木工程、电子等领域的设计和制图工作。→→↓↓载AutoCAD2024win/Mac 首先,AutoCAD2024拥有先进的绘图工具和自动化功能。它提供了多种绘图模式和命令,如线、......
  • 【题解】CF1854B Earn or Unlock
    你考虑,我们很容易地可以构造一个\(n^2\)的DP:\(f_{i,j}\)表示当前在\(i\)张牌,还可以摸\(j\)张牌的最大分数。转移也很好转移,你考虑一眼就会。但是我们显然要缩减复杂度,我们看到数据范围\(10^5\),想到了根号。分块???显然不行。莫队???都没有区间查询,怎么行呢?然后你苦思冥想......
  • sv timescale
    timescale1timescale作用`timescale是Verilog中的预编译指令,指定位于它后边的module的时间单位和时间精度,直到遇到新的`timescale指令或者`resetall指令。它的语法如下:`timescaletime_unit/time_precision假如我们延时x个时间单位,那延时的总时间time=x*time_unit,但最后......
  • Docker(2)--图形化及编排
    1.Docker图形化界面图形化界面直接使用命令下载,其本身也是一个镜像dockerrun-id-p8000:8000-p9000:9000--name=portainer  --restart=always  -v/var/run/docker.sock:/var/run/docker.sock  -vportainer_data:/data  portainer/portainer ......