答案1
正如 Tetsujin 通过实验推断的那样,SMB 协议在某些地方传输的时间戳确实受到限制。在通用互联网文件系统协议规范,可获得以下信息:
2.2.1.4.1 SMB_DATE
这是用于对日期进行编码的 16 位小端字节序值。SMB_DATE 值应按以下方式解释。日期以服务器的本地时区表示。以下字段名称仅供参考。
字段名称和位掩码 描述 年份 0xFE00 年份。将 1980 添加到结果值中以返回实际年份。<17> 月 0x01E0 月份。值范围是 1 至 12。 第 0x001F 天 日期。值范围是 1 到 31。
第 17 条注释如下:
SMB_DATE.YEAR 字段允许的最大值为 119,因此年份范围是 1980 至 2099。
还:
2.2.1.4.3 时间
这是一个 32 位无符号整数,采用小端字节顺序,表示自 1970 年 1 月 1 日 00:00:00.0 以来的秒数。
该类型声明如下:
typedef unsigned int UTIME;
优泰是“现代”的变体,而SMB_DATE主要用于已弃用的旧式命令。
然而,这还不是全部。在其他地方,文件时间类型描述如下:
包含一个 64 位值,表示自 1601 年 1 月 1 日(UTC)以来 100 纳秒间隔的数量。
因此,Explorer 可以使用其中一种旧类型来列出目录,但在查询扩展元数据(包括 ACL)时使用其中一种新类型。
无论如何,从客观的角度来看,你的做法是错误的。文件系统元数据(如修改后的数据)与文件内容无关。它与文件有关。你可以添加正确的信息里面使用标签来标记文件。MP4 和 MKV 容器均支持此功能。
不过,媒体中心软件可能不会看到这一点。因此,您应该在文件名中添加年份,例如“Sahara Hare (1955).mkv”。所有媒体中心软件都普遍接受这一点。