0
点赞
收藏
分享

微信扫一扫

【小5聊】时区时间转换报错问题,Kind属性



【运用场景】

当一个时间值有跨时区显示,那么就需要进行时间的转换

比如:前端页面输入的时间值应该表示的是当地时间值,数据库保存的值,应该要转为UTC值进行保存,假设用户的当地时间和UTC标准时间相差5个小时utc+5

用户填写时间:2022-05-11 18:05:00

数据库保存时间:2022-05-11 13:05:00


1、提示如下

【小5聊】时区时间转换报错问题,Kind属性_时差转换


2、原因

因为now的Kind是Local,表示当地时间,当前时间和源时区不一致导致报错

在转换的时间方法TimeZoneInfo.ConvertTime()

1)第一个参数,当前时间,此处是当地时间,Kind=Local,判定

2)第二个参数,源时区

3)第三个餐宿,表示目标时区

3、解决方法一

将第二个参数改为Local本地时区

  • 效果

【小5聊】时区时间转换报错问题,Kind属性_时差转换_02

  • 代码
DateTime now = DateTime.Now;
string now_kind = now.Kind.ToString(); //now_kind="Local" > 本地时间

string local_time_string = now.ToString("yyyy-MM-dd HH:mm:ss");
string time_zone_string = "Pakistan Standard Time"; //utc+3

DateTime local_time = Convert.ToDateTime(local_time_string);
string local_time_kind = local_time.Kind.ToString();

TimeZoneInfo time_zone_info_local = TimeZoneInfo.Local;
TimeZoneInfo time_zone_info_target = TimeZoneInfo.FindSystemTimeZoneById(time_zone_string);

DateTime target_time = TimeZoneInfo.ConvertTime(local_time, time_zone_info_local, time_zone_info_target);

 4、解决方法二

直接转换成中间类型的Kind=Unspecified

5、解决方法三

转为直接使用两个参数,第一个是当前时间值,第二个是目标时区

【小5聊】时区时间转换报错问题,Kind属性_时区_03

6、获取时区值

 【小5聊】时区时间转换报错问题,Kind属性_时差转换_04

var list = new List<object>();
var zone = TimeZoneInfo.GetSystemTimeZones();

foreach (var item in zone)
{
list.Add(new
{
item.Id,
item.DisplayName,
hours = item.BaseUtcOffset.Hours,
item.StandardName
});
}



举报

相关推荐

0 条评论