使用DateTime从任何文化格式获取文件的GetLastWriteTime,然后将其转换为yyyy / MM / dd

时间:2014-11-20 20:49:47

标签: c# date datetime

我们的应用程序在美国,英国和日本的用户PC上使用,可能在其他国家/地区的EMEA或APAC。

应用程序要求我们的用户使用folderBrowserDialog浏览到存储特定文件的文件夹。然后,应用程序将获取每个文件的路径以及文件的上次更新日期,并将每个文件的路径和日期作为参数传递给可执行文件,然后在单独的线程中处理文件。

我使用以下代码来获取日期和时间:

DateTime fileDate = File.GetLastWriteTime(folder containing all my files);

在美国,fileDate总是在" MM / dd / yyyy HH:mm:ss"格式,我使用字符串操作将fileDate变为yyyy / MM / dd格式,因为我需要它。

问题在于,当我们在英国,日本,德国或其他国家的用户使用该应用时,fileDate不是MM / dd / yyyy格式,它可能是dd / MM / yyyy或yyyy / dd / MM然后一切都被抛弃了。

有没有办法让fileDate始终采用标准格式,例如yyyy / MM / dd,所以我不必担心本地时间格式,也不必使用字符串操作来获取我需要的格式。

我试过了

fileDate.ToString("yyyy-MM-dd HH:mm:ss")    

但这似乎不起作用,因为没有日期传递给我们的可执行文件。

我搜索过Stack Overflow和Internet,但我找不到有效的解决方案。

下面是我用来将日期转换为字符串并按照我喜欢的方式格式化的代码

                    DateTime fileDate = File.GetLastWriteTime(collectionLog);
                    orgDate = Convert.ToString(fileDate);


                    stringMod1 = orgDate.Replace(" ", "#");
                    stringMod2 = orgDate.Substring(0, stringMod1.IndexOf("#"));
                    stringMod3 = stringMod2.Split('/');
                    stopDate.Text = stringMod3[2] + "/" + stringMod3[0] + "/" + stringMod3[1];

                    DateTime fiveDaysEarlier = fileDate.AddDays(-5);

                    beginDate = Convert.ToString(fiveDaysEarlier);
                    stringMod1 = beginDate.Replace(" ", "#");
                    stringMod2 = beginDate.Substring(0, stringMod1.IndexOf("#"));
                    stringMod4 = stringMod2.Split('/');
                    startDate.Text = stringMod4[2] + "/" + stringMod4[0] + "/" + stringMod4[1];

1 个答案:

答案 0 :(得分:0)

如果您可以将DateTime对象传递给您的EXE会更好,但似乎您希望将Dates作为字符串传递给您的exe,并且特定格式的yyyy/MM/dd也是如此。使用:

stopDate.Text = fileDate.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);

无论文化如何,这都会以相同的格式为您提供日期字符串。将其用于其他日期:

startDate.Text = fiveDaysEarlier.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);

请参阅:Custom Date and Time Format Strings