DateTime.Now.ToString( "M/d/yyyy HHmmss" ) 仅在部署位置返回月份



创建一个新文件夹

string newFolder = Globals.applicationPath + @"BatchHistoryBatch" + DateTime.Now.ToString("M/d/yyyy HHmmss") + @"";

在开发PC中,一切都按预期工作,文件夹命名为:"Batch12-23-2019 181504">

将控制台应用部署到服务器时,文件夹名称显示为"Batch12">

知道为什么吗?

侧面细节:

  • .NET 框架 4.7.2
  • 输出类型:控制台应用
  • 本地开发环境:Win10
  • 已部署环境:WinSrv 2016

问题实际上是部署位置上的区域性设置。

您的DateTime.Now.ToString()方法也可能在部署的位置上创建"某些"格式,但正斜杠(/(不能是Windows中文件夹名称的一部分。

发件人:命名文件、路径和命名空间

The following reserved characters:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
 (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

当您尝试命名文件夹时,它看起来像是在"第一个"/字符部分之前分配的,这在您的情况下是Batch12

请记住,自定义日期字符串上的"/"自定义格式说明符具有"替换我当前区域性或提供的区域性日期分隔符"的特殊含义。在你的开发电脑中,你的CurrentCultureDateSeparator属性似乎 - 这就是为什么它在结果字符串中。

这意味着已部署服务器的CurrentCulture正在使用/作为DateSeparator,这就是为什么当您使用该方法时,它仍然/ToString

我建议您在开发和部署的服务器上使用相同的区域性设置。或者,您可以在代码中将日期分隔符从/更改为-,例如;

string newFolder = Globals.applicationPath + @"BatchHistoryBatch" +
DateTime.Now.ToString("M-d-yyyy HHmmss") + @"";

最新更新