Anexar carimbo de data / hora a um nome de arquivo

118

Já me deparei com esse problema várias vezes, no qual gostaria de ter várias versões do mesmo arquivo no mesmo diretório. A maneira como tenho feito isso usando C # é adicionando um carimbo de data / hora ao nome do arquivo com algo assim DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Existe uma maneira melhor de fazer isso?

Marca
fonte

Respostas:

260

Você pode usar o método DateTime.ToString (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

ou string.Format

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

ou Strings Interpoladas

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

Existem os seguintes especificadores de formato personalizado y (ano), M (mês), d (dia), h (hora 12), H (hora 24), m (minuto), s (segundo), f (segunda fração), F (segunda fração, zeros à direita são aparados), t (PM ou AM) ez (fuso horário).

Com Método de Extensão

Uso:

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

Método de extensão

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
Damith
fonte
1
Eu adicionei Path.GetDirectoryName(fileName)para obter o caminho completo para o arquivo. Em seguida, substituído string.Concat()com Path.Combine()obter o nome do arquivo completo.
Gilu
17

Eu prefiro usar:

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

O que ToFileTime () faz?

Converte o valor do objeto DateTime atual em uma hora de arquivo do Windows.

public long ToFileTime()

A hora do arquivo do Windows é um valor de 64 bits que representa o número de intervalos de 100 nanossegundos decorridos desde as 12h00 à meia-noite de 1º de janeiro de 1601 AD (CE), Horário Universal Coordenado (UTC). O Windows usa um tempo de arquivo para registrar quando um aplicativo cria, acessa ou grava em um arquivo.

Fonte: documentação do MSDN - Método DateTime.ToFileTime

Publicidades
fonte
10

Talvez acrescentar DateTime.Now.Ticks, em vez disso, seja um pouco mais rápido, pois você não criará 3 strings e o valor dos ticks sempre será único também.

Icaro
fonte
2

você pode usar:

Stopwatch.GetTimestamp();
Joseph
fonte
esta resposta da forma como você obtém o carimbo de data / hora !. anexá-lo a um arquivo usando a classe Path e a manipulação de strings não é um problema. esta é apenas uma alternativa para DateTime.ToString Method (String) ou string.Format ("{0: aaaa-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Joseph
1

Você pode usar a seguir:

DateTime.Now.Ticks
gokul
fonte
1

Para Data e hora atuais como o nome de um arquivo no sistema de arquivos. Agora chame o método string.Format e combine-o com DateTime.Now, para um método que produza a string correta com base na data e hora.

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");
    }
}

Resultado :

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

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

texto- A primeira parte dos arquivos necessários de saída começarão todos com texto-

{0: indica que este é um marcador de posição de string O zero indica o índice dos parâmetros inseridos aqui

aaaa- Imprime o ano em quatro dígitos seguidos de um travessão. Isso tem um problema de "ano 10000"

MM- Imprime o mês em dois dígitos

dd_ Imprime o dia em dois dígitos seguidos por um sublinhado

hh- Imprime a hora em dois dígitos

mm- Imprime o minuto, também em dois dígitos

ss- Como esperado, ele imprime os segundos

tt Imprime AM ou PM dependendo da hora do dia

Fezal halai
fonte