Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用datetime作为文件名,然后解析文件名?_C#_Datetime_File Io_Datetime Format - Fatal编程技术网

C# 使用datetime作为文件名,然后解析文件名?

C# 使用datetime作为文件名,然后解析文件名?,c#,datetime,file-io,datetime-format,C#,Datetime,File Io,Datetime Format,我正在将文件写入硬盘,文件名如下: String.Format("{0:yyyy-MM-dd_hh-mm-ss}.txt", DateTime.Now) 例如,文件名是“2010-09-20_09-47-04.txt”。现在我想在下拉列表中显示这些文件名,但使用另一种格式。格式应为dd.MM.yyyy HH:MM:ss。我如何才能做到这一点,或者有更好的方法吗 谢谢:)您可以将其解析回日期时间,然后将其格式化为您的显示格式。您可以使用与生成名称相同的格式,将文件名解析为日期时间对象,然后使用将

我正在将文件写入硬盘,文件名如下:

String.Format("{0:yyyy-MM-dd_hh-mm-ss}.txt", DateTime.Now)
例如,文件名是“2010-09-20_09-47-04.txt”。现在我想在下拉列表中显示这些文件名,但使用另一种格式。格式应为dd.MM.yyyy HH:MM:ss。我如何才能做到这一点,或者有更好的方法吗


谢谢:)

您可以将其解析回日期时间,然后将其格式化为您的显示格式。

您可以使用与生成名称相同的格式,将文件名解析为日期时间对象,然后使用

将其转换为所需格式。您可以使用正则表达式解析文件名:

Regex r = new Regex("(\d{4})-(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2}).txt");
Match m = r.Match(fileName);
更新:其他人提出的DateTime.Parse方法更合适

由于您正在使用日期,您可能需要考虑使用创建的日期或文件的修改日期来代替?

FileInfo f = new FileInfo(fileName);
string title = String.Format("{0:dd.MM.yyyy}", f.CreationTime);

我在控制台上试过这个,它成功了

Imports System.Globalization
Module Module1

Sub Main()
    Dim enUS As New CultureInfo("en-US")
    Dim d As String = Format(DateTime.Now, "yyyy-MM-dd_hh-mm-ss")
    Dim da As Date = DateTime.ParseExact(d, "yyyy-MM-dd_hh-mm-ss", enUS)
    Console.WriteLine("Date from filename: {0}", d)
    Console.WriteLine("Date formated as date: {0}", Format(da, "dd.MM.yyyy HH:mm:ss"))

End Sub
End Module

希望能有所帮助。

谢谢你提供的示例代码,但乔治关于
ParseExact
的建议是正确的。@Steven-啊,是的,我忘记了TryParseExact。这将是一个更好的选择。感谢
ParseExact
TryParseExact
如果输入是意外格式的有效日期,则会有失败的好处。但是,您想使用这两种方法中的哪一种取决于抛出异常是否是处理失败的最佳方法。这是一个好主意。或者,
TryParseExact
可能是个好主意,除非你真的想在这里失败。Parse/ParseExact似乎不适合我的格式……我也需要时间。@grady-ParseExact也应该返回时间。我们需要一个保护正则表达式的社会,来保护它们免受这种滥用。;-)嗯,我不认为这是滥用,如果你假设有一个字符串作为输入,需要分析它的日期。只是DateTime已经提供了它。谁知道他们是否在幕后使用正则表达式?他们没有。但即使他们这样做了,这也不是我们这样做的好理由。:-)如果需要24小时制,请使用大写字母
hh
部分。
Imports System.Globalization
Module Module1

Sub Main()
    Dim enUS As New CultureInfo("en-US")
    Dim d As String = Format(DateTime.Now, "yyyy-MM-dd_hh-mm-ss")
    Dim da As Date = DateTime.ParseExact(d, "yyyy-MM-dd_hh-mm-ss", enUS)
    Console.WriteLine("Date from filename: {0}", d)
    Console.WriteLine("Date formated as date: {0}", Format(da, "dd.MM.yyyy HH:mm:ss"))

End Sub
End Module