C#DateTime.ToString“ o”格式在Azure上返回不同的字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#DateTime.ToString“ o”格式在Azure上返回不同的字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1229字,纯文字阅读大概需要2分钟。
内容图文
![C#DateTime.ToString“ o”格式在Azure上返回不同的字符串](/upload/InfoBanner/zyjiaocheng/685/fb4d9166ec8148ee8ba4910955b2bdb8.jpg)
我有一种情况,我想将UTC日期转换为具有特定时区的ISO 8601字符串,以通过Web api发送.推荐的方法是使用TimeZoneInfo,如下所示:
var configuredTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneString);
var localTime = DateTime.SpecifyKind(TimeZoneInfo.ConvertTimeFromUtc(utcTime, configuredTimeZone), DateTimeKind.Local);
var stringResult = localTime.ToString("o");
这在我的本地计算机上运行良好,但是我遇到了一种非常奇怪的情况,即当代码托管在Azure Web应用程序中时,ToString输出不同的字符串.我在本地得到2017-02-20T00:00:00-06:00(这就是我想要的,因为它包含我需要的时区信息),但是当托管在Azure中时,我得到2017-02-20T00:00:00 00 :00.(使用UTC,不是我想要的).由于我是手动应用所需的时区,因此我不确定为什么格式会附加错误的时区信息.有人遇到过吗?
解决方法:
如注释中所述,System.DateTime无法存储时区.它所知道的只是“本地”或“ UTC”.托管在Azure中,其“本地”时间为UTC.
因此,您的TimeZoneInfo.ConvertTimeFromUtc(utcTime,configureTimeZone)语句会将UTC时间转换为您的时间(20日午夜),但是由于DateTime没有时区,因此它是DateTimeKind.Unspecified.您的DateTime.SpecifyKind(…,DateTimeKind.Local)仅告诉它它是“本地”类型,对于Azure主机,它是UTC 00:00.
如果时区很重要,则要使用System.DateTimeOffset而不是DateTime.它是专门为保留和操纵(如其名称所暗示的)时区偏移量而构建的.
内容总结
以上是互联网集市为您收集整理的C#DateTime.ToString“ o”格式在Azure上返回不同的字符串全部内容,希望文章能够帮你解决C#DateTime.ToString“ o”格式在Azure上返回不同的字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。