Как сохранить дату и время в миллисекундах в объект DateTime в C #? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть словарь с ключом в объекте DateTime.

static Dictionary<DateTime, string> messageList = new Dictionary<DateTime, string>();

Я не хочу хранить дату и время в миллисекундах в качестве ключа.

static Dictionary<DateTime, string> messageList = new Dictionary<DateTime, string>();

Я хочу сохранить данныевремя в формате 01/01/2008 00:30:45.125 в качестве ключа в словаре.

Ответы [ 3 ]

5 голосов
/ 23 сентября 2019

Я сильно подозреваю, что вы путаете между значением DateTime и текстовым представлением DateTime.

A DateTime экземпляр не не имеют любой неявный формат.Он просто имеет значения даты и времени, которые основаны на Ticks.Понятие «формат» только применяется, когда вы получаете текстовое (также известное как строковое) представление.

Если вы действительно хотите «сохранить» свойданные с определенным «форматом» (в большинстве случаев вы не должны), тогда вам нужно использовать Dictionary<string, string> вместо Dictionary<DateTime, string>.

Если вы хотите «усечь» часть наносекунд и оставить миллисекундытолько вы можете использовать DateTime.AddTicks метод как;

myDateTime = myDateTime.AddTicks( - (myDateTime.Ticks % TimeSpan.TicksPerMillisecond) / 100);
2 голосов
/ 23 сентября 2019

Я хочу сохранить время данных в формате 01/01/2008 00: 30: 45.125 в качестве ключа для словаря.

DateTime объекты неесть форматы .Это двоичные данные , которые представляют дату и время.Вы можете легко использовать DateTime объект со значением, которое представляет момент, описанный 01/01/2008 00:30:45.125, как ключ словаря, но это не одно и то же.

Если вам нужен определенный формат строки, используйте строку в качестве типа ключа .Но, вероятно, вы обдумываете это, и вам действительно не нужен этот конкретный формат строки в Словаре.В конце концов, вы всегда можете взять этот объект DateTime и отформатировать его для последующего отображения, и это действительно лучшая практика.

Остальное беспокойство вызывает то, что DateTime имеет точность до миллисекунды, то есть вы можете иметьболее одного значения DateTime за одну миллисекунду.Если в вашей среде возможно создать две точки данных за одну и ту же миллисекунду и вы хотите, чтобы они оказались в одном и том же месте в вашем словаре, вам нужно будет усечь или округлить значение DateTime.Я предпочитаю делать это, создавая новое значение DateTime, используя свойства из старого, хотя некоторые вычисления с использованием Ticks потенциально быстрее:

public DateTime RoundToMillisecond(DateTime original)
{
    return new DateTime(original.Year, original.Month, original.Day, original.Hour, original.Minute, original.Second, original.Millisecond);
}
2 голосов
/ 23 сентября 2019

Класс DateTime уже имеет компонент в миллисекундах, и ваш код должен работать.Если вы хотите отобразить дату в определенном формате, используйте функцию ToString () и укажите соответствующую строку формата.

var myDate = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...