DateTime.ToString() format that can be used in a filename or extension?

C#DatetimeFilenamesDatetime Format

C# Problem Overview


I want to add a timestamp to filenames as files are created but most of the DateTime methods I've tried output something with spaces and slashes. For instance:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806

ToFileTime() works but is not exactly human-readable. How can I format the output to a human-readable timestamp with date and time that can be used in a filename or extension? Prefereably something like 2011-19-9--13-45-30?

C# Solutions


Solution 1 - C#

You can use this:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");

Solution 2 - C#

I would use the ISO 8601 format, without separators:

DateTime.Now.ToString("yyyyMMddTHHmmss")

Solution 3 - C#

I have a similar situation but I want a consistent way to be able to use DateTime.Parse from the filename as well, so I went with

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35

When I want to parse, I can simply reverse the Replace call. This way I don't have to type in any yymmdd stuff or guess what formats DateTime.Parse allows.

Solution 4 - C#

Personally I like it this way:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")

Because it distinguishes between the date and the time.

Solution 5 - C#

The below list of time format specifiers most commonly used.,

> dd -- day of the month, from 01 through 31. > > MM -- month, from 01 through 12. > > yyyy -- year as a four-digit number. > > hh -- hour, using a 12-hour clock from 01 to 12. > > mm -- minute, from 00 through 59. > > ss -- second, from 00 through 59. > > > HH -- hour, using a 24-hour clock from 00 to 23. > > tt -- AM/PM designator.

Using the above you will be able to form a unique name to your file name.

Here i have provided example

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";

OR

If you don't prefer to use symbols you can try this also.,

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";

Hope this helps to someone now or in future. :)

Solution 6 - C#

Using interpolation string & format specifier:

var filename = $"{DateTime.Now:yyyy.dd.M HH-mm-ss}"

Example Output for January 1st, 2020 at 10:40:45AM:

>2020.28.01 10-40-45


Or if you want a standard date format:

var filename = $"{DateTime.Now:yyyy.M.dd HH-mm-ss}"

>2020.01.28 10-40-45


Note: this feature is available in C# 6 and later versions of the language.

Solution 7 - C#

You can try with

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");

Solution 8 - C#

You can make a path for your file as bellow:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpdizzView Question on Stackoverflow
Solution 1 - C#Kristof ClaesView Answer on Stackoverflow
Solution 2 - C#Christoffer LetteView Answer on Stackoverflow
Solution 3 - C#Gabe HaackView Answer on Stackoverflow
Solution 4 - C#Charles ClaytonView Answer on Stackoverflow
Solution 5 - C#RajeshKdevView Answer on Stackoverflow
Solution 6 - C#ChickenFeetView Answer on Stackoverflow
Solution 7 - C#Aghilas YakoubView Answer on Stackoverflow
Solution 8 - C#rouhollah ghasempourView Answer on Stackoverflow