Подтвердить что ты не робот

Как работает DateTime.Now.Ticks?

В моем приложении я генерирую файлы случайным образом. Для обеспечения уникального наименования я попытался использовать nano секунд с 1.1.1970:

long time = DateTime.Now.Ticks;
String fileName = Convert.ToString(time);
Console.WriteLine(fileName);

Теперь я заметил что-то странное. Почему это так? Я имею в виду, почему последние 4 числа всегда одинаковы? Я могу использовать это как имя файла, это не проблема, но мне просто интересно об этом.

634292263478068039
634292263512888039
634292263541368039
634292263603448039
634292263680078039
4b9b3361

Ответ 1

Разрешение DateTime.Now зависит от вашего системного таймера (~ 10 мс в текущей ОС Windows)... поэтому он дает то же самое (оно больше не считается конечным).

Ответ 2

На самом деле я не ответил на ваш вопрос, но подумал, что я обманул бы вашу общую цель.

Уже существует способ генерации случайных имен файлов в .NET.

См. System.Path.GetTempFileName и GetRandomFileName.

В качестве альтернативы общепринятой практикой является использование GUID для обозначения случайных файлов.

Ответ 3

Вы можете получить миллисекунды с 01.01.1970, используя такой код:

private static DateTime JanFirst1970 = new DateTime(1970, 1, 1);
public static long getTime()
{
    return (long)((DateTime.Now.ToUniversalTime() - JanFirst1970).TotalMilliseconds + 0.5);
}

Ответ 4

преобразовать текущую дату и время в имя файла, чтобы сохранить файлы, которые вы можете использовать

DateTime.Now.ToFileTime();

это должно решить вашу цель