সি # তে জাভা সিস্টেম.কালিনটাইমমিলিস () সমতুল্য


86

জাভা এর সমতুল্য কি System.currentTimeMillis()সি # তে ?


শুধু কৌতূহল, 1970 এর পরে আপনার কেন মিলিসের দরকার?
অ্যালেক্স বি

4
ডেটটাইমঅফসেট.উটকনও.টউউনিক্সটাইমমিলিসেকেন্ডস ()
রামুনাস

উত্তর:


90

একটি বিকল্প:

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

4
"ডেটটাইমঅফসেট.উটকনও.টুক ইউনিক্সটাইমমিলিসেকেন্ডস ()" এর সাথে একই ফলাফল
রামুনাস

75

জাভাতে একটি সাধারণ প্রবাদ হ'ল currentTimeMillis()সময় বা সময় নির্ধারণের উদ্দেশ্যে ব্যবহার করা, যেখানে আপনি ১৯ 1970০ সাল থেকে আসল মিলিসেকেন্ডগুলিতে আগ্রহী নন, তবে পরিবর্তে কিছু আপেক্ষিক মান গণনা করুন এবং currentTimeMillis()সেই মানটির পরবর্তী অনুরোধগুলির সাথে তুলনা করুন ।

যদি আপনি এটি সন্ধান করেন তবে সি # সমতুল্য Environment.TickCount


4
তবে তারা উভয়ই পার্থক্য নম্বর দেয় they কীভাবে তারা সঠিকভাবে তুলনা করে ?? C# give : 2688547এবংJava give : 1390707872687
এলশান

4
@ এলশন আপনি তাদের তুলনা করতে পারবেন না তারা বিভিন্ন টিক্স এই কৌশলটি কোনও অ্যাপ্লিকেশনের মধ্যে নয়, কোনও অ্যাপ্লিকেশনের মধ্যে সময় ও সময়সূচীকরণের জন্য।
বেরেন্ড

System.currentTimeMillis()১৯ 1970০ সাল থেকে ইউটিসি সময়কে এমএসে Environment.TickCountফেরত দেয় , যখন অ্যাপটি শুরু হওয়ার পর থেকে এমএস প্রদান করে। System.currentTimeMillis()অতিবাহিত সময় যাচাই করার জন্য ভাল, তবে আপনি যদি দুটি সময়কাল তুলনীয় হতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে System.nanoTime()
michelpm

12

আপনি যদি টাইমিংয়ের বিষয়ে আগ্রহী হন, System.Diagnostics এ একটি রেফারেন্স যুক্ত করুন এবং স্টপওয়াচ ব্যবহার করুন।

উদাহরণ স্বরূপ:

var sw = Stopwatch.StartNew();
...
var elapsedStage1 = sw.ElapsedMilliseconds;
...
var elapsedStage2 = sw.ElapsedMilliseconds;
...
sw.Stop();


7

System.currentTimeMillis()জাভা 1/1/1970 থেকে মিলিসেকেন্ডে বর্তমান সময় ফেরৎ

সি # হবে

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

সম্পাদনা করুন: প্রস্তাবিত হিসাবে এটি utc তৈরি :)


4
ডেটটাইম.এখন ইউটিসি নয়, স্থানীয় সময় ব্যবহার করে। আপনি যখন কোনও স্থানীয় থেকে কোনও অজানা ধরণের ডেটটাইম বিয়োগ করেন তখন ঠিক কী হয় তা আমি জানি না, তবে উভয়কেই ইউটিসি-তে সেট করা ভাল :)
জন স্কিটি

7

আমরা কিছুটা অভিনবতা পেতে পারি এবং এটি একটি এক্সটেনশন পদ্ধতি হিসাবে করতে পারি, যাতে এটি ডেটটাইম ক্লাসটি বন্ধ করে দেয়:

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

4
এটা কি একটু ভুল নয়? এই এক্সটেনশন পদ্ধতিটি ডেটটাইমের যে কোনও উদাহরণে হাত দেবে , তবে এটি উদাহরণটি ব্যবহার করে না। কেবল বিভ্রান্তিকর বলে মনে হচ্ছে ... আপনার মনে হচ্ছে এমন কোনও প্যারামিটারের দরকার নেই যা আপনি ব্যবহার করেন না
মার্টব

4
@ মর্টব এটি একটি এক্সটেনশন পদ্ধতি। শ্রেণি পরিবর্তন না করে কোনও শ্রেণিতে "পদ্ধতি যুক্ত করতে" এটি সি # তে সংজ্ঞায়িত হয়। সংকলক পদ্ধতিটি ব্যাখ্যা করে এবং এটি "এই" পরামিতিটির কোনও ক্ষেত্রে প্রয়োগ করতে পারে যেন এটি ক্লাসে নিজেই একটি উদাহরণ পদ্ধতি। এটি স্ট্যাটিক ক্লাসে একটি পদ্ধতির মতোই কাজ করে তবে সংকলকটি একটি সহজ, বিকল্প বাক্য গঠন লেখার অনুমতি দেয়।
সানকাট 2000

4
সমস্যাটি হ'ল প্যারামিটারটির মান dব্যবহার করা হয়নি। এই কোডটি ব্যবহার করতে আপনি লিখতে পারেন var date = new DateTime(); var millis = date.currentTimeMillis();তবে dateভেরিয়েবলটি কেবল অতিরিক্ত কাজ হবে এবং এর রাজ্যটি কখনও ব্যবহার করা হয়নি। যখন কোনও এক্সটেনশান পদ্ধতি তৈরি করা অবজেক্টের স্থিতি ব্যবহার না করা হয় তখন কোডটি কেবল অস্পষ্ট করে। @ হ্যাথ দ্বারা প্রদত্ত উত্তরটি আরও সোজা এগিয়ে এবং অতএব (আমার কাছে) ভাল। হতে পারে @ জোয়েল কোহোর্ন পদ্ধতি শরীরে dপরিবর্তে মানটি ব্যবহার করার ইচ্ছা নিয়েছেন DateTime.UtcNow? আমি এক্সটেনশন পদ্ধতিগুলি বেশ ব্যবহার করি তবে এটির জন্য নয়।
মার্টব

আপনি কেন একটি এক্সটেনশান তৈরি করবেন, যে তারিখটি ব্যবহার করে না? আমি এই কোডটি ব্যবহার করেছি এবং এটি আমাকে ধরে ফেলেছে। সঠিক সংস্করণটি হ'ল: রিটার্ন (দীর্ঘ) ((d.ToUniversalTime () - Jan1st1970) .টোটালমিলিসেকেন্ডস);
জি

4

ইউনিক্স টাইমস্ট্যাম্প আনুমানিক করার জন্য এখানে একটি সহজ উপায়। ইউটিসি ব্যবহার করা ইউনিক্স ধারণার কাছাকাছি, এবং আপনাকে এ থেকে গোপনীয় 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

ঠিক আমার যা দরকার ছিল
আজিবোলা 1

3

কাঠামোটিতে ১৯ 1970০ সাল থেকে পুরানো সেকেন্ড (বা মিলিসেকেন্ড) অন্তর্ভুক্ত নেই।


4
(ডেটটাইম.টিক্স / 10000000) - (0001 এবং 1970 এর মধ্যে সেকেন্ডের সংখ্যা) একটি সঠিক উত্তর দেবে?
লিয়াম

3

নীচের মত আপনি যা চেষ্টা করে যাচ্ছেন তা অর্জন করার জন্য আমি কেবল সর্বাধিক সোজা অগ্রসর উপায় বিবেচনা করছি:

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond

4
DateTime.UtcNowএকটি ভাল বিকল্প
মেহেদী খাদেমলু

2

আপনি যদি জিএনইউ / লিনাক্স এবং উইন্ডোজ (অন্তত সাতটি) এর অধীনে বিভিন্ন প্রক্রিয়া, বিভিন্ন ভাষা (জাভা, সি, সি #) এর মধ্যে তুলনা করার জন্য একটি টাইমস্ট্যাম্প চান:

সি #:

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

জাভা:

java.lang.System.nanoTime();

সি জিএনইউ / লিনাক্স:

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

সি উইন্ডোজ:

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

1

আমি জানি যে সমমানের জন্য প্রশ্ন জিজ্ঞাসা করছে তবে যেহেতু আমি এই 2 টি একই কাজের জন্য ব্যবহার করি আমি গেটটিকাউন্টে ফেলেছি । আমি নস্টালজিক হতে পারি তবে টিকিট পাওয়ার জন্য আমি কেবল সিস্টেম কন্ট্রোনটাইমমিলিস () এবং গেটটিকাউন্ট () ব্যবহার করি।

[DllImport("kernel32.dll")]
static extern uint GetTickCount();

// call
uint ticks = GetTickCount();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.