如何使用我的格式创建日期时间目录的这种格式?

时间:2017-01-20 07:42:08

标签: c# .net winforms

我做的测试是:

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”

问题是如何在解析为此格式后格式化我的日期和时间?

1 个答案:

答案 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如果确实需要当天的名字。