c# - কিভাবে একটি.NET তারিখ সময় বন্ধ মিলিসেকেন্ড ছিনতাই করা




datetime (9)

আমি একটি ডাটাবেস সংরক্ষিত মান একটি ইনকামিং অনুরোধ থেকে একটি সময় স্ট্যাম্প তুলনা করার চেষ্টা করছি। অবশ্যই এসকিউএল সার্ভারটি মিলিসেকেন্ডগুলির কিছু নির্ভুলতা রাখে এবং যখন কোনও .NET তারিখের সময় পড়তে থাকে, তখন এটি মিলিসেকেন্ড অন্তর্ভুক্ত থাকে। তবে, সিস্টেমের আগত অনুরোধটি স্পষ্টতা প্রদান করে না, তাই আমাকে কেবল মিলিসেকেন্ডগুলি ড্রপ করতে হবে।

আমার মনে হচ্ছে আমি কিছু সুস্পষ্ট অনুভব করছি, কিন্তু আমি এটি করতে একটি মার্জিত উপায় খুঁজে পাইনি (C #)।

https://code.i-harness.com


Diadistis প্রতিক্রিয়া সংক্রান্ত। এটা আমার জন্য কাজ করে, আমি গুণের আগে বিভাগের ভগ্নাংশ অংশ মুছে ফেলার জন্য মেঝে ব্যবহার ছিল। সুতরাং,

d = new DateTime((d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);

হয়ে

d = new DateTime(Math.Floor(d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);

আমি আশা করি দুই লং মানগুলির বিভাজন দীর্ঘ লম্বা হতে হবে, এভাবে দশমিক অংশ মুছে ফেলা হবে, তবে এটি গুণমানের পরে সঠিক একই মানটি রেখে একটি ডাবল হিসাবে সমাধান করে।

Eppsy


উপরে উল্লেখ সমাধান জন্য 2 এক্সটেনশান পদ্ধতি

    public static bool LiesAfterIgnoringMilliseconds(this DateTime theDate, DateTime compareDate, DateTimeKind kind)
    {
        DateTime thisDate = new DateTime(theDate.Year, theDate.Month, theDate.Day, theDate.Hour, theDate.Minute, theDate.Second, kind);
        compareDate = new DateTime(compareDate.Year, compareDate.Month, compareDate.Day, compareDate.Hour, compareDate.Minute, compareDate.Second, kind);

        return thisDate > compareDate;
    }


    public static bool LiesAfterOrEqualsIgnoringMilliseconds(this DateTime theDate, DateTime compareDate, DateTimeKind kind)
    {
        DateTime thisDate = new DateTime(theDate.Year, theDate.Month, theDate.Day, theDate.Hour, theDate.Minute, theDate.Second, kind);
        compareDate = new DateTime(compareDate.Year, compareDate.Month, compareDate.Day, compareDate.Hour, compareDate.Minute, compareDate.Second, kind);

        return thisDate >= compareDate;
    }

ব্যবহার:

bool liesAfter = myObject.DateProperty.LiesAfterOrEqualsIgnoringMilliseconds(startDateTime, DateTimeKind.Utc);

কখনও কখনও আপনি বছরের বা মাস মত কিছু ক্যালেন্ডার ভিত্তিক, ছিনতাই করতে চান। এখানে একটি এক্সটেনশান পদ্ধতি যা আপনাকে কোনও রেজল্যুশন চয়ন করতে দেয়।

public enum DateTimeResolution
{
    Year, Month, Day, Hour, Minute, Second, Millisecond, Tick
}

public static DateTime Truncate(this DateTime self, DateTimeResolution resolution = DateTimeResolution.Second)
{
    switch (resolution)
    {
        case DateTimeResolution.Year:
            return new DateTime(self.Year, 1, 1, 0, 0, 0, 0, self.Kind);
        case DateTimeResolution.Month:
            return new DateTime(self.Year, self.Month, 1, 0, 0, 0, self.Kind);
        case DateTimeResolution.Day:
            return new DateTime(self.Year, self.Month, self.Day, 0, 0, 0, self.Kind);
        case DateTimeResolution.Hour:
            return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerHour));
        case DateTimeResolution.Minute:
            return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerMinute));
        case DateTimeResolution.Second:
            return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerSecond));
        case DateTimeResolution.Millisecond:
            return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerMillisecond));
        case DateTimeResolution.Tick:
            return self.AddTicks(0);
        default:
            throw new ArgumentException("unrecognized resolution", "resolution");
    }
}

কম সুস্পষ্ট কিন্তু 2 গুণ বেশি দ্রুত:

// 10000000 runs

DateTime d = DateTime.Now;

// 484,375ms
d = new DateTime((d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);

// 1296,875ms
d = d.AddMilliseconds(-d.Millisecond);

নতুন পদ্ধতি

String Date = DateTime.Today.ToString("dd-MMM-yyyy"); 

// স্ট্রিং পাস পরামিতি dd-mmm-yyyy 24-feb-2016 ফেরত নির্ধারণ করুন

অথবা টেক্সট বক্সে প্রদর্শিত

txtDate.Text = DateTime.Today.ToString("dd-MMM-yyyy");

// PageonLoad উপর রাখুন


নিম্নোক্ত মিলিসেকেন্ডগুলির একটি তারিখের জন্য নিম্নলিখিতটি কাজ করবে এবং প্রকার সম্পত্তি (স্থানীয়, Utc বা অনির্ধারিত) সংরক্ষণ করে।

DateTime dateTime = ... anything ...
dateTime = new DateTime(
    dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond), 
    dateTime.Kind
    );

অথবা সমতুল্য এবং সংক্ষিপ্ত:

dateTime = dateTime.AddTicks( - (dateTime.Ticks % TimeSpan.TicksPerSecond));

এটি একটি এক্সটেনশান পদ্ধতিতে সাধারণকরণ করা যেতে পারে:

public static DateTime Truncate(this DateTime dateTime, TimeSpan timeSpan)
{
    if (timeSpan == TimeSpan.Zero) return dateTime; // Or could throw an ArgumentException
    if (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) return dateTime; // do not modify "guard" values
    return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}

যা নিম্নরূপ ব্যবহার করা হয়:

dateTime = dateTime.Truncate(TimeSpan.FromMilliseconds(1)); // Truncate to whole ms
dateTime = dateTime.Truncate(TimeSpan.FromSeconds(1)); // Truncate to whole second
dateTime = dateTime.Truncate(TimeSpan.FromMinutes(1)); // Truncate to whole minute
...

সরল ...

//Remove milliseconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", null);

এবং আরো ...

//Remove seconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm"), "yyyy-MM-dd HH:mm", null);

//Remove minutes
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH"), "yyyy-MM-dd HH", null);

//and go on...

var date = DateTime.Now;

date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Kind);

DateTime d = DateTime.Now;
d = d.AddMilliseconds(-d.Millisecond);




datetime