Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使时区显示长名称而不是缩写(Xamarin Android)_C#_Android_Timezone_Xamarin.android_Xamarin - Fatal编程技术网

C# 无法使时区显示长名称而不是缩写(Xamarin Android)

C# 无法使时区显示长名称而不是缩写(Xamarin Android),c#,android,timezone,xamarin.android,xamarin,C#,Android,Timezone,Xamarin.android,Xamarin,我正在尝试从System.timezone获取时区的长名称。这就是我试图做到的: Console.WriteLine(System.TimeZone.CurrentTimeZone.DaylightName); 我进入控制台的结果是 东部标准 但我需要的是一个长长的名字: 东部标准时间 我查看了C#documentation()并注意到.Net库返回了我需要的内容,但出于某种原因,Xamarin(mono)只是给了我缩写 有办法解决吗?一天结束时,我费了很大的劲才弄明白这一点,最后在网站上找到

我正在尝试从
System.timezone
获取时区的长名称。这就是我试图做到的:

Console.WriteLine(System.TimeZone.CurrentTimeZone.DaylightName);
我进入控制台的结果是

东部标准

但我需要的是一个长长的名字:

东部标准时间

我查看了C#documentation()并注意到.Net库返回了我需要的内容,但出于某种原因,Xamarin(mono)只是给了我缩写


有办法解决吗?

一天结束时,我费了很大的劲才弄明白这一点,最后在网站上找到了一个转换器,在android或设备上找到了而不是

    private TimeZoneInfo ConvertTimeZone(string timeZoneString)
    {
        ReadOnlyCollection<TimeZoneInfo> timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();
        if (Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[0-9]{0,2}") && !Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[-]{1}[0-9]{0,2}"))
        {
            List<string> abbreviations = new List<string>();

            // create the list of abbreviations for TimeZoneInfos
            timeZoneInfos.ToList().ForEach(
                x =>
            {
                if (!Regex.IsMatch(x.StandardName, "[A-Z0-9]{3,4,5}"))
                {
                    string fullString = x.StandardName.Replace(" ", string.Empty);
                    string[] split = Regex.Split(fullString, "[a-z]|[()-.]");
                    abbreviations.Add(string.Concat(split));
                }
            });

            return timeZoneInfos[abbreviations.IndexOf(timeZoneString)];
        }
        else
        {
            return timeZoneInfos.Where(x => x.StandardName == timeZoneString).First();
        }
    }
专用时区信息转换时区(字符串时区限制)
{
ReadOnlyCollection TimeZoneInfo=TimeZoneInfo.GetSystemTimeZones();
if(Regex.IsMatch(timeZoneString,[A-Z]{3,5}[0-9]{0,2}”)&&!Regex.IsMatch(timeZoneString,[A-Z]{3,5}[-]{1}[0-9]{0,2})
{
列表缩写=新列表();
//创建时区信息的缩写列表
TimeZoneInfo.ToList().ForEach(
x=>
{
如果(!Regex.IsMatch(x.StandardName,“[A-Z0-9]{3,4,5}”))
{
string fullString=x.StandardName.Replace(“,string.Empty”);
string[]split=Regex.split(fullString,[a-z]|[()-.]);
缩写.Add(string.Concat(split));
}
});
返回时区信息[缩写.IndexOf(timeZoneString)];
}
其他的
{
返回TimeZoneInfo.Where(x=>x.StandardName==timeZoneString.First();
}
}
这样做的目的是让我的数据在地图上显示正确的时区,这就做到了


警告:这可能适用于大多数北美时区,但我不能保证它适用于全世界。Windows有102个时区,我只是测试了几个。我基本上创建了一个缩写图

我知道它有点老,但对于那些需要时区名称的人,请使用

Java.Util.TimeZone.Default.ID

这将给出时区名称。

我在iOS中也得到同样的结果。我建议提交一个bug:bugzilla.xamarin.com谢谢@Jason!我刚刚报告了。。。同时,我正在寻找一个无故障的解决方法:)您是否正在寻找一个人类可读的显示名称?或者您正在寻找时区id以传递回服务?@MattJohnson-Human-readable。我已经使用TimeZoneInfo找到了一个解决方案,明天我会发布答案。@P.Sami我目前遇到了这个问题-你报告了错误吗?