파일 이름에 타임 스탬프 추가


118

나는 동일한 디렉토리에 동일한 파일의 여러 버전을 갖고 싶어하는이 문제를 여러 번 발견했습니다. 내가 C #을 사용하여 해왔 던 방식은 다음과 같이 파일 이름에 타임 스탬프를 추가하는 것 DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변:


260

DateTime.ToString 메서드 (String)를 사용할 수 있습니다.

DateTime.Now.ToString("yyyyMMddHHmmssfff")

또는 string.Format

string.Format("{0:yyyy-MM-dd_HH-mm-ss-fff}", DateTime.Now);

또는 보간 된 문자열

$"{DateTime.Now:yyyy-MM-dd_HH-mm-ss-fff}"

사용자 지정 형식 지정자 y (연도), M (월), d (일), h (12시), H (24시), m (분), s (초), f (초 분수), F가 있습니다. (두 번째 분수, 후행 0이 잘림), t (PM 또는 AM) 및 z (시간대).

연장 방법으로

용법:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

연장 방법

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}

1
Path.GetDirectoryName(fileName)파일의 전체 경로를 가져 오기 위해 추가 했습니다. 그리고 교체 string.Concat()Path.Combine()가져 오기 전체 파일 이름.
gilu

17

다음을 선호합니다.

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";

ToFileTime ()은 무엇을합니까?

현재 DateTime 개체의 값을 Windows 파일 시간으로 변환합니다.

public long ToFileTime()

Windows 파일 시간은 1601 AD (CE) 협정 세계시 (UTC) 1 월 1 일 자정 12시 이후 경과 한 100 나노초 간격의 수를 나타내는 64 비트 값입니다. Windows는 파일 시간을 사용하여 응용 프로그램이 파일을 생성, 액세스 또는 쓸 때 기록합니다.

출처 : MSDN 문서-DateTime.ToFileTime 메서드


10

DateTime.Now.Ticks대신 추가 하는 것이 3 개의 문자열을 생성하지 않고 틱 값도 항상 고유하므로 조금 더 빠릅니다.


2

당신이 사용할 수있는:

Stopwatch.GetTimestamp();

이 대답은 타임 스탬프를 얻는 방법입니다!. Path 클래스를 사용하여 파일에 추가하면 문자열 조작이 전혀 문제가되지 않습니다. DateTime.ToString Method (String) 또는 string.Format ( "{0 : yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now)의 대안 일뿐입니다.
Joseph

1

대신 아래를 사용할 수 있습니다.

DateTime.Now.Ticks

1

현재 날짜 및 시간의 경우 파일 시스템에있는 파일의 이름입니다. 이제 string.Format 메서드를 호출하고 DateTime.Now와 결합하여 날짜 및 시간에 따라 올바른 문자열을 출력합니다.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        //
        // Write file containing the date with BIN extension
        //
        string n = string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin",
            DateTime.Now);
        File.WriteAllText(n, "abc");
    }
}

출력 :

C:\Users\Fez\Documents\text-2020-01-08_05-23-13-PM.bin

"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin"

text- 필요한 출력 파일의 첫 부분은 모두 텍스트로 시작합니다.

{0 : 문자열 자리 표시 자임을 나타냅니다. 0은 여기에 삽입 된 매개 변수의 색인을 나타냅니다.

yyyy- 연도를 4 자리 숫자와 대시로 인쇄합니다. "year 10000"문제가 있습니다.

MM- 월을 ​​두 자리로 인쇄합니다.

dd_ 밑줄이 뒤에 오는 두 자리 숫자로 날짜를 인쇄합니다.

hh- 시간을 두 자리로 인쇄합니다.

mm- 분도 두 자리로 인쇄합니다.

ss- 예상대로 초를 인쇄합니다.

tt 시간에 따라 AM 또는 PM을 인쇄합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.