那些年向前冲|core国际化 从入门到真香,.net( 二 )


2)通过查询字符串切换语言
3、多时区3.1、场景预设预设1:HomeController中有两个方法 , GetTime返回服务端或数据库中存储的UTC时间 , 系统根据客户本地时区自动转换成其对应时间;SetTime方法接收客户本地时区下的时间 , 转换成UTC时间存入服务器或数据库
预设2:系统支持中国东八区时间及印度东5区时间
3.2、自定义时间转换器//////日期转换///publicclassDateTimeOffsetJsonConverter:JsonConverter{privateTimeZoneInfochinaZoneInfo=TimeZoneInfo.CreateCustomTimeZone("zh",TimeSpan.FromHours(8),"中国时区","Chinatimezone");privateTimeZoneInfoindiaZoneInfo=TimeZoneInfo.CreateCustomTimeZone("en-IN",TimeSpan.FromHours(5),"印度时区","Indiatimezone");publicoverrideDateTimeOffsetRead(refUtf8Jsonreaderreader,TypetypeToConvert,JsonSerializerOptionsoptions){varcurrentZoneInfo=Thread.CurrentThread.CurrentCulture.Name.Contains("zh")?chinaZoneInfo:indiaZoneInfo;//vartime1=DateTimeOffset.Parse(reader.GetString());//vartime2=time1.ToOffset(currentZoneInfo.BaseUtcOffset);vartime1=newDateTimeOffset(DateTime.Parse(reader.GetString()),currentZoneInfo.BaseUtcOffset);vartime2=time1.ToUniversalTime();//vartime3=time2.ToUniversalTime();returntime2;}publicoverridevoidWrite(Utf8JsonWriterwriter,DateTimeOffsetvalue,JsonSerializerOptionsoptions){varcurrentZoneInfo=Thread.CurrentThread.CurrentCulture.Name.Contains("zh")?chinaZoneInfo:indiaZoneInfo;writer.WriteStringValue(value.ToOffset(currentZoneInfo.BaseUtcOffset).ToString("yyyy-MM-ddHH:mm:ss"));}}如上所述 , 自定义时间序列化转换器 , 读取时间时 , 根据客户语言环境匹配其对应时区 , 时区中有对应UTC偏离时间信息 , 据此转换成UTC时间;序列化写入时候 , 同样根据语言环境匹配时区信息 , 将服务器端的UTC时间按照时区偏离转换成本地时间返给客户端 。
3.3、时间转换测试1)获取服务器时间
中文环境时间:
英文环境:


推荐阅读