C#将时间转化为ISO8601规范的UTC格式-百度原创星火计划published_time格式转换

最近研究了下百度的星火计划2.0,在为文章页面的meta标签标注发布时间时,遇到了一个C#的时间格式转化问题,需要将文章发布时间转化为ISO8601规范的UTC格式。由于比较少遇到这个知识点,就做个笔记记录下。

主要是看中了这个计划对原创的保护,可惜我的博客毕竟只是小站,没有办法加入测试。不过官方文档有提到星火计划以后会逐步推广到全网站点,就先做下准备把。由于我博客是自己用ASP.NET MVC编写的,根据官方的原创规范在文章页面添加一些标识也不是很难。

需要进行时间格式转换的字段是一个published_time字段(文章发布时间/最早发布时间,为必选字段!),详情建议看百度星火计划原创规范v2.0的说明:

关于published_time字段文档说明

根据文档的说明,标识的published_time必须是ISO8601规范的UTC格式,标准格式为“YYYY-MM-DDTHH:MM:SS+时区”。

PS:UTC(世界统一时间,世界标准时间,协调世界时),可以网上找下百科了解下。

假设当前某篇文章发布的时间是"2017-04-02 17:30:25",那么转化成标准UTC格式则为"2017-04-02T17:30:25+08:00"。因为我国的时间比世界统一时间快8小时,也就是+8的时差,后面的+08:00就是这个意思,注意添加字符"T"在日期和小时中间(无空格)。

这里稍微理解就好了,因为C#本身有提供时间转化的方法,所以不需要我们自己手动去换算。对于C#来说,通过ToString()方法的自定义日期和时间格式字符串就可以成功进行转换,主要是使用"zzz"自定义格式说明符,如下代码所示:

DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz");

上面这段代码就会将当前时间转换成UTC格式,这边贴下我在控制台进行测试的代码:

DateTime dt = DateTime.Now;
Console.WriteLine("当前时间-普通格式:{0}",dt.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine("当前时间-UTC格式:{0}", dt.ToString("yyyy-MM-ddTHH:mm:sszzz"));
Console.ReadKey();

最后输出结果如下:

普通格式和UTC格式的时间差别

另外还有"z","zz"和"o"格式说明符也可以将日期转换成UTC时间,不过与星火计划原创规范的要求略有不同,感兴趣的可以尝试下,我这边也顺便贴下这三个格式的效果:

其他可以转换UTC的自定义格式

最后提醒下,如果先用DateTime.ToUniversalTime()方法或者DateTime.UtcNow获取当前的UTC时间,再通过自定义时间格式转化是画蛇添足的,而且还会报错,引发DateTimeInvalidLocalFormat异常




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/99024.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论