Java System.currentTimeMillis () эквивалент в C # - PullRequest
80 голосов
/ 14 ноября 2008

Что эквивалентно Java System.currentTimeMillis() в C #?

Ответы [ 11 ]

88 голосов
/ 14 ноября 2008

Альтернатива:

private static readonly DateTime Jan1st1970 = new DateTime
    (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static long CurrentTimeMillis()
{
    return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
67 голосов
/ 18 апреля 2011

Распространенная идиома в Java - это использование currentTimeMillis() для целей синхронизации или планирования, когда вас не интересуют фактические миллисекунды с 1970 года, а вместо этого вычисляется некоторое относительное значение и сравнивается более поздний вызов currentTimeMillis() значение.

Если это то, что вы ищете, эквивалент C # будет Environment.TickCount.

10 голосов
/ 01 июня 2011

Если вас интересует время, добавьте ссылку на System.Diagnostics и используйте секундомер.

Например:

var sw = Stopwatch.StartNew();
...
var elapsedStage1 = sw.ElapsedMilliseconds;
...
var elapsedStage2 = sw.ElapsedMilliseconds;
...
sw.Stop();
7 голосов
/ 14 ноября 2008

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

public static class DateTimeExtensions
{
    private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    public static long currentTimeMillis(this DateTime d)
    {
        return (long) ((DateTime.UtcNow - Jan1st1970).TotalMilliseconds);
    }
}
7 голосов
/ 14 ноября 2008

System.currentTimeMillis() в java возвращает текущее время в миллисекундах с 1/1/1970

c # это было бы

public static double GetCurrentMilli()
    {
        DateTime Jan1970 = new DateTime(1970, 1, 1, 0, 0,0,DateTimeKind.Utc);
        TimeSpan javaSpan = DateTime.UtcNow - Jan1970;
        return javaSpan.TotalMilliseconds;
    }

edit: сделал это utc как предложено:)

4 голосов
/ 14 ноября 2008

Вот простой способ приблизить метку времени Unix. Использование UTC ближе к понятию Unix, и вам нужно конвертировать из double в long.

TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
long millis = (long)ts.TotalMilliseconds;
Console.WriteLine("millis={0}", millis);

печать:

millis=1226674125796
3 голосов
/ 30 мая 2018
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
3 голосов
/ 25 ноября 2014

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

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
3 голосов
/ 14 ноября 2008

Каркас не включает старые секунды (или миллисекунды) с 1970 года. Ближайшее значение - DateTime.Ticks, которое представляет собой число 100 наносекунд с 1 января 0001 года.

1 голос
/ 23 мая 2017

Если вы хотите, чтобы временная метка сравнивалась между разными процессами, разными языками (Java, C, C #), в GNU / Linux и Windows (по крайней мере, семь):

C #:

private static long nanoTime() {
   long nano = 10000L * Stopwatch.GetTimestamp();
   nano /= TimeSpan.TicksPerMillisecond;
   nano *= 100L;
   return nano;
}

Java:

java.lang.System.nanoTime();

C GNU / Linux:

static int64_t hpms_nano() {
   struct timespec t;
   clock_gettime( CLOCK_MONOTONIC, &t );
   int64_t nano = t.tv_sec;
   nano *= 1000;
   nano *= 1000;
   nano *= 1000;
   nano += t.tv_nsec;
   return nano;
}

C Windows:

static int64_t hpms_nano() {
   static LARGE_INTEGER ticksPerSecond;
   if( ticksPerSecond.QuadPart == 0 ) {
      QueryPerformanceFrequency( &ticksPerSecond );
   }
   LARGE_INTEGER ticks;
   QueryPerformanceCounter( &ticks );
   uint64_t nano = ( 1000*1000*10UL * ticks.QuadPart ) / ticksPerSecond.QuadPart;
   nano *= 100UL;
   return nano;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...