Вопрос

Мне было интересно, есть ли способ создать временную метку в c # из datetime?Мне нужно значение точности в миллисекунду, которое также работает в Compact Framework (говоря, что начиная с DateTime.ToBinary() не существует в CF).

Моя проблема в том, что я хочу сохранить это значение независимо от базы данных, чтобы я мог отсортировать его позже и выяснить, какое значение больше из другого и т.д.

Это было полезно?

Решение

Я всегда использую что-то вроде следующего:

public static String GetTimestamp(this DateTime value)
{
    return value.ToString("yyyyMMddHHmmssfff");
}

Это даст вам строку типа 200905211035131468, поскольку строка идет от старших разрядов временной метки к младшим простая сортировка строк в ваших SQL-запросах может использоваться для упорядочивания по дате, если вы добавляете значения в базу данных

Другие советы

Я полагаю, что вы можете создать метку даты в стиле unix с точностью до секунды, используя следующее

//Find unix timestamp (seconds since 01/01/1970)
long ticks = DateTime.UtcNow.Ticks - DateTime.Parse("01/01/1970 00:00:00").Ticks;
ticks /= 10000000; //Convert windows ticks to seconds
timestamp = ticks.ToString();

Настройка знаменателя позволяет вам выбрать свой уровень точности

Вы могли бы использовать DateTime.Свойство Ticks, которое является долговременным и универсальным для хранения, всегда увеличивается и может быть использовано также в compact framework.Просто убедитесь, что ваш код не используется после 31 декабря 9999 года ;)

Вы также можете использовать

Секундомер.getTimestamp().toString();

Если вам нужны временные метки, соответствующие реальному времени, но также уникальные (для данного экземпляра приложения), вы можете использовать следующий код:

public class HiResDateTime
{
   private static long lastTimeStamp = DateTime.UtcNow.Ticks;
   public static long UtcNowTicks
   {
       get
       {
           long orig, newval;
           do
           {
               orig = lastTimeStamp;
               long now = DateTime.UtcNow.Ticks;
               newval = Math.Max(now, orig + 1);
           } while (Interlocked.CompareExchange
                        (ref lastTimeStamp, newval, orig) != orig);

           return newval;
       }
   }
}

когда вам нужно в считанные секунды:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top