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我目前遇到了这个问题-你报告了错误吗?