我做的测试是:
string date = DateTime.Now.ToString("ddd dd.MM.yyyy");
string time = DateTime.Now.ToString("HH.mm tt");
string format = "{0} from {1} At {2}";
string cp = string.Format(format, "", date, time);
Directory.CreateDirectory(@"c:\\temp\\" + cp);
变量cp的结果是:从2017年1月20日星期五上午9点27分开始 并且创建此目录没有问题。
这是我的代码:
for (int i = 0; i < countriesNames.Count(); i++)
{
string pathDateTime = urls[0].Substring(48, 12);
string pathDateTimeLast = urls[urls.Count - 1].Substring(48, 12);
var d = DateTime.ParseExact(pathDateTime, "yyyyMMddHHmm", CultureInfo.InvariantCulture);
var e = DateTime.ParseExact(pathDateTimeLast, "yyyyMMddHHmm", CultureInfo.InvariantCulture);
string country = countriesNames[i].Substring(15);
string f = "{0} from {1} At {2} until {3}";
string countryPath = countriesMainPath + "\\" + country + "\\" + string.Format(f, "", d,e);
if (!Directory.Exists(countryPath))
{
Directory.CreateDirectory(countryPath);
}
countryPaths.Add(countryPath);
}
我用'f'变量做的方式是不正确的,并且工作不正常给我例外。
在变量'd'的代码中有20/01/2017 05:15:00 并且在变量'e'20 / 01/07 07:30:00
但是我无法创建这个目录。 所以我想在提取它们之后格式化我的日期和时间,就像第一个例子中的格式一样:从星期五20.01.2017上午09.27但是我的日期和时间。
例如,我的目录应该是:
从星期五20.1.2017上午05:15到2017年1月20日上午07:30 然后创建这个目录:“从星期五20.1.2017上午05:15到2017年1月20日上午07:30”
问题是如何在解析为此格式后格式化我的日期和时间?
答案 0 :(得分:2)
您正尝试使用当前区域设置的默认(长)格式设置日期来创建路径。在大多数国家/地区,日期分隔符为/
,时间分隔符始终为:
。这会导致路径无效。
要了解您要使用的格式有点困难,因为您将调用混合到String.Format 和连接结果。似乎原始路径应该是:
var cp=String.Format(@"c:\temp\From {0:ddd dd.MM.yyyy} At {0:HH.mm tt}",DateTime.Now);
或
var root="c:\temp\";
var partialPath = String.Format("From {0:ddd dd.MM.yyyy} At {0:HH.mm tt}",DateTime.Now)
var cp=Path.Combine(root,partialPath);
您无需单独格式化每个组件。如果您查看String.Format的文档,您会发现可以为每个占位符使用复合格式字符串。
国家路径似乎是
var partialPath = String.Format(@"{0}\from {1:ddd dd.MM.yyyy} At {1:HH.mm tt} until {2:HH.mm tt}",
country,d,e);
var countryPath =Path.Combine(countriesMainPath,partialPath);
那就是说,我不会使用那种日期格式。生成的文件夹名称无法以有意义的方式排序,使用户难以按日期查找文件夹。我会使用yyyy-MM-dd
格式,或yyyy-MM-dd ddd
如果确实需要当天的名字。