以时间形式替代冒号

时间:2014-12-31 19:14:10

标签: filenames iso8601

ISO 8601建议使用以下日期和时间格式:

2014-12-29T16:11:20+00:00

我非常喜欢这种格式,因为它允许词汇排序。但是存在一个小问题:某些文件系统不允许文件名中的冒号(至少不是正常的)。 ISO 8601允许省略冒号,但我宁愿在那里使用一些符号而不是数字一起运行:

2014-12-29T161120+0000

ISO 8601是否允许冒号以外的符号?我找不到它的任何迹象。如果没有,是否还有其他公认的符号我可以使用? (或许另一个标准提出这样的符号?)

3 个答案:

答案 0 :(得分:6)

没有。

ISO 8601只允许冒号(:)以扩展格式分隔时间组件:

  

基本格式为[hh] [mm] [ss],扩展格式为[hh]:[mm]:[ss]。

没有替代扩展格式的规定。

答案 1 :(得分:0)

对于组合的日期和时间表示,您必须对日期和时间使用基本格式,或者对日期和时间表示都使用扩展格式,以符合ISO 8601。

符合ISO 8601的日期和时间表示的示例:

 public static void Main(string[] args)
{
   var host = CreateHostBuilder(args).Build();

   using (var scope = host.Services.CreateScope())
   {
       var services = scope.ServiceProvider;

       var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

       ApplicationDbContextSeed.SeedDefaultUserAsync(userManager)
         .GetAwaiter().GetResult(;

       var context = services.GetRequiredService<ApplicationDbContext>();

       await ApplicationDbContextSeed.SeedSampleDataAsync(context);
   }

   host.Run();

}

为获得与各种操作系统文件命名要求和ISO 8601兼容性的最大兼容性,我认为最后一个示例或类似的方法应该有效。

参考:https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations

答案 2 :(得分:0)

没有其他规定,您不能具有完整的日期时间表达式,其中前半部分为扩展格式,后半部分为基本格式;它们必须具有相同的格式。

一种解决方法,我要强调的是,用其他东西(例如,句点或下划线)来分割字符串,以分隔两个有效表达式,即扩展格式的日期和基本格式的时间:例如, myfilename_2020-12-13.T0006Z_otherNotes.ext myfilename_2020-12-13_T0006Z_otherNotes.ext

您必须清楚使用这些文件的其他部分-主要是关于机器文件-因为它不是完整的日期时间表达式,而是2个有效文件,每个文件格式不同-扩展,然后是基本-分开用一个明确且一致的字符(出于这个原因,我特别提到了句号​​/下划线而不是破折号/连字符)。

这种方法的明显缺点是:时间部分很难阅读,其他人可能认为您实施ISO的程度很差,或者对ISO的理解不充分。

好的方面...它可以在Windows中工作,可以按正确的顺序组织文件系统中的元素,尽管有OS,但它遵循ISO标准(以特殊方式),并且与机器兼容(通过脚本)到AI和中间的一切。

这是一种解决方法。我重复一遍。

最后一点,我真的很想知道为什么执行ISO 8601-2019的人没有考虑在文件名中使用ISO的问题,或者他们完全不知道它。