সি # ব্যবহার করে মিলি সেকেন্ডে সময় পান


131

আমি এমন একটি প্রোগ্রাম তৈরি করছি যাতে আমার সময়টি মিনিসেকেন্ডে সময় পাওয়া উচিত। সময়ের সাথে সাথে, এমন একটি সংখ্যার অর্থ যা কখনই নিজের সমান হয় না এবং সর্বদা এটি আগের চেয়ে 1000 সংখ্যা বড় bigger আমি এটিকে রূপান্তর DateTime.Nowকরার চেষ্টা করেছি TimeSpanএবং তা TotalMillisecondsথেকে পেয়েছি ... তবে আমি শুনেছি এটি পুরোপুরি সঠিক নয়।

এই কাজ করতে একটি সহজ উপায় আছে?


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

16
"এমন একটি সংখ্যা যা কখনই নিজের সমান হয় না"। এই শব্দ ... জটিল। ;)
মিজিপজোর

1
NaN আসলে সেই প্রয়োজনের সাথে খাপ খায়। "একটি সংখ্যা নয়" হওয়া সত্ত্বেও এটি একটি সংখ্যার ধরণ, এবং এটি নিজের সমান নয়।
Yay295

উত্তর:


78

Stopwatchক্লাস ব্যবহার করুন ।

অতিবাহিত সময় সঠিকভাবে পরিমাপ করতে আপনি ব্যবহার করতে পারেন এমন একটি পদ্ধতি এবং বৈশিষ্ট্য সরবরাহ করে।

এটি বাস্তবায়নের জন্য এখানে কিছু ভাল তথ্য রয়েছে:

পারফরম্যান্স টেস্ট: System.Diagnostics.Shopwatch এর সাথে যথাযথ রান টাইম পরিমাপ


8
স্টপওয়াচ ডায়াগনস্টিকসের অংশ। এটি কি বাস্তব কোডে ব্যবহার করা উচিত?
আন্দ্রে


এটি সাধারণত নিকটতম 15 মিমি বা তার জন্য সঠিক।
স্টিভেন সুদিত

11
যদিও এটি ব্যয়বহুল? সম্ভবত আমাদের স্টপওয়াচ বন্ধ করা উচিত :)
জেবি।

3
@ স্টিভেন, এটি ওএস এবং অন্তর্নিহিত হার্ডওয়্যারের উপর নির্ভর করে। যদি উপলব্ধ থাকে তবে একটি উচ্চ রেজোলিউশন টাইমার ব্যবহার করা হয়, যা বর্তমানের সমস্ত ডেস্কটপ এবং সার্ভার ভিত্তিক x86 উইন্ডোজ সংস্করণের ক্ষেত্রে আমি সচেতন। আরও তথ্যের জন্য ফ্রিকোয়েন্সি এবং ইসএইচআইআর রেজোলিউশন বৈশিষ্ট্যগুলি পরীক্ষা করুন। ওএস স্তরে, কোয়েরি পারফরম্যান্স কাউন্টার এবং কোয়েরি পারফরম্যান্স ফ্রিকোয়েন্সি হ'ল নিম্ন-স্তরের এপিআই যা এই কার্যকারিতাটি ফিরিয়ে দেয়।
ক্রিস টেলর 18

320
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

DateTimeOffsetক্লাসে বিভিন্ন ইউনিক্স রূপান্তর পদ্ধতি বাস্তবায়িত হয় এটি (। নেট ফ্রেমওয়ার্ক 4.6+, নেট স্ট্যান্ডার্ড 1.3+):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();

65
শিরোনামটি "মিলি সেকেন্ডে সময় পান"। এই উত্তর সহায়ক।
এয়ারস্পেস

33
হ্যাঁ, আমরা যারা জিজ্ঞাসা করা হয়েছে সেই প্রশ্নের উত্তর অনুসন্ধান করার জন্য এটি অত্যন্ত সহায়ক ছিল, আপনাকে ধন্যবাদ।
ব্যবহারকারী430788

1
আপনি যদি দশমিক চান (যদিও DateTime.Nowখুব প্রায়ই "আপডেট" না হয়) অবশ্যই তার decimal milliseconds = DateTime.Now.Ticks / (decimal)TimeSpan.TicksPerMillisecond;পরিবর্তে ব্যবহার করুন।
জেপ্প স্টিগ নীলসেন

1
এটি অনুসন্ধান ফলাফলের জন্য নির্বাচিত উত্তরের চেয়ে এমনকি মূল প্রশ্ন থেকে আমি কী সংগ্রহ করি তার চেয়ে অনেক বেশি দরকারী।
বুয়ুগি

1
এই উত্তর আমার জীবন বাঁচায়। অনুরূপ কোড পেয়েছে তবে কাজ করে না। কেন বুঝতে পারলাম না। তারপরে আমি longমিলি সেকেন্ডের সামনে ডেটাটাইপটি দেখেছি । ব্যবহার intঅবশ্যই ওভারফ্লো করত।
ফিসনান

13

দ্য DateTime.Ticksসম্পত্তি এঁটেল পোকা যে তারিখ ও সময় প্রতিনিধিত্ব সংখ্যা পায়।

10,000 টিিকস একটি মিলিসেকেন্ড (প্রতি সেকেন্ডে 10,000,000 টিক্স)।


4
তবে টিক্সের রেজোলিউশন 1/10000 এর চেয়ে খুব কম, সম্ভবত
1/62

2
@ কোডিমানিক্স - এমএসডিএন থেকে:A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond.
Itay Karo

5
অবশ্যই এটি ঠিক, তবে অপারেটিং সিস্টেমের কাছে এই সঠিক হওয়ার রেজোলিউশন নেই।
কোডিমানিক্স

6
@ কোডিমানিক্স সঠিক। উপমা অনুসারে, একটি অ্যাংস্ট্রোম দৈর্ঘ্যের একক; দশ বিলিয়ন অ্যাংস্ট্রোম এক মিটার তৈরি করে। আপনি এমন একটি ফাংশন লিখতে পারেন যা আপনার উচ্চতা অ্যাংস্ট্রোমে bit৪ বিট পূর্ণসংখ্যার হিসাবে রিপোর্ট করে তবে আপনার সমস্ত কিছু যদি সেন্টিমিটারের সাথে সঠিক একটি মেট্রাস্টিক হয় তবে ফাংশনটি সাব-ন্যানোমিটার যথার্থতার প্রতিনিধিত্ব করে তা সম্পূর্ণ অপ্রাসঙ্গিক। কম উল্লেখযোগ্য সংখ্যাগুলি আবর্জনা হতে চলেছে।
এরিক লিপার্ট

4
@ রেডফিল্টার: আপনি যদি সত্যই আপনার বয়সটি নিকটতম মিলি সেকেন্ডের কাছে জানতেন তবে আপনি সম্ভবত এই জাতীয় কথা বলতে পারতেন, "আমি যখন আবার জ্বলজ্বল করব তখন আমার বয়স হবে এক্স মিলিসেকেন্ড।" গভীর সমস্যাটি যোগাযোগ নয়, পরিমাপের: আপনার জন্মটি নিকটতম দ্বিতীয়টি পর্যন্ত জানা সম্ভব নয়।
স্টিভেন সুদিত 25:14

11

আমি নিম্নলিখিত ক্লাস ব্যবহার। আমি এটি ইন্টারনেটে একবার পেয়েছি, এখনই সেরা হয়ে উঠার জন্য পোস্ট করা ()

/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
    private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    /// <summary>Get extra long current timestamp</summary>
    public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}

উত্স অজানা।


5
সাধারণভাবে ব্যবহৃত স্নিপেটের সম্পূর্ণ পয়েন্ট FWIW হ'ল এমন একটি টাইমস্ট্যাম্প তৈরি করা যা ইউনিক্স টাইমস্ট্যাম্প স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ। তার জন্য, এটি অত্যাবশ্যক। যদি কেউ কেবল সময় করতে চায় তবে এটি অহেতুক ব্যয়বহুল।
টুলমেকারস্টেভ

8

আপনি QueryPerformanceCounterস্থানীয় পদ্ধতিতে চেষ্টা করতে পারেন । আরও তথ্যের জন্য http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html দেখুন । Stopwatchক্লাসটি এটাই ব্যবহার করে।

দেখুন কিভাবে মধ্যে .NET / C # এর টিক সঠিকতার টাইমস্ট্যাম্প পেতে? আরও তথ্যের জন্য.

Stopwatch.GetTimestamp() এই পদ্ধতিতে অ্যাক্সেস দেয়:

public static long GetTimestamp() {
     if(IsHighResolution) {
         long timestamp = 0;
         SafeNativeMethods.QueryPerformanceCounter(out timestamp);
         return timestamp;
     }
     else {
         return DateTime.UtcNow.Ticks;
     }
 }

1
আফাইক স্টপ ওয়াচটি যদি পাওয়া যায় তবে অভ্যন্তরীণভাবে কোয়েরি পারফরম্যান্স কাউন্টার ব্যবহার করে
কোডিমানিক্স

হ্যাঁ, Stopwatch.GetTimestamp()বাস্তবে অভ্যন্তরীণ বাস্তবায়ন সেই পদ্ধতিতে অ্যাক্সেস সরবরাহ করে।
পিটার ভ্যান জিনকেল

5

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


1
টাইমঅফডে প্রতিদিন মধ্যরাতে শূন্যে পুনরায় সেট করার পরে যেগুলি বর্ধমান মানগুলি (মূল পোস্টার হিসাবে প্রয়োজনীয় হিসাবে) ফেরত দেয় না। এছাড়াও এটিতে একই সম্ভাব্য সমস্যাগুলি রয়েছে যা পোস্টারটিতে কেবল ডেটটাইম ব্যবহার করার সময় উল্লেখ করা হয়েছিল ow এখন থেকে মোট মিলি সেকেন্ড পাওয়া।
জিম ও'নিল

3
জিম ওনিল আমি আপনার সাথে একমত, সে কারণেই আমি আমার পোস্টে "(বর্তমান সময়ের জন্য)" উল্লেখ করেছি ... বিটিডব্লিউ, আমার সমাধানটি আমার সমস্যার জন্য কাজ করেছিল, কারণ আমার সমস্যাটি তারিখ-নির্দিষ্ট নয়, আমার কেবল দরকার ছিল কাউন্টার হিসাবে ব্যবহার করার জন্য মিলিসেকেন্ড অংশটি, তাই আমি এটি এখানে পোস্ট করেছি। আমি এখানে নতুন, তাই যদি আমি এটি কোনও ভুল জায়গায় পোস্ট করি তবে দুঃখিত দুঃখিত :)
সারভান

2

ব্যবহার System.DateTime.Now.ToUniversalTime()। এটি আপনার পড়াটিকে একটি পরিচিত রেফারেন্স-ভিত্তিক মিলিসেকেন্ডের ফর্ম্যাটে রাখে যা দিন পরিবর্তন ইত্যাদি সম্পূর্ণভাবে মুছে দেয় etc.


জেনে রাখা ভাল তবে জিজ্ঞাসা করা প্রশ্নটির সাথে প্রাসঙ্গিক নয়, যা সময় সম্পর্কে (সময় উত্তরণের পরিমাপ) সম্পর্কিত, সঠিকভাবে যোগাযোগের সময় নয়।
টুলমেকারস্টেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.