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




7 Answers

নিম্নোক্ত মিলিসেকেন্ডগুলির একটি তারিখের জন্য নিম্নলিখিতটি কাজ করবে এবং প্রকার সম্পত্তি (স্থানীয়, 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
...

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

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




এখানে একটি পূর্ববর্তী উত্তরের উপর ভিত্তি করে একটি এক্সটেনশান পদ্ধতি যা আপনাকে কোনও রেজোলিউশন থেকে আলাদা করতে দেয় ...

ব্যবহার:

DateTime myDateSansMilliseconds = myDate.Truncate(TimeSpan.TicksPerSecond);
DateTime myDateSansSeconds = myDate.Truncate(TimeSpan.TicksPerMinute)

ক্লাস:

public static class DateTimeUtils
{
    /// <summary>
    /// <para>Truncates a DateTime to a specified resolution.</para>
    /// <para>A convenient source for resolution is TimeSpan.TicksPerXXXX constants.</para>
    /// </summary>
    /// <param name="date">The DateTime object to truncate</param>
    /// <param name="resolution">e.g. to round to nearest second, TimeSpan.TicksPerSecond</param>
    /// <returns>Truncated DateTime</returns>
    public static DateTime Truncate(this DateTime date, long resolution)
    {
        return new DateTime(date.Ticks - (date.Ticks % resolution), date.Kind);
    }
}



পরিবর্তে মিলিসেকেন্ড ড্রপ করার পরিবর্তে তুলনা, কেন পার্থক্য তুলনা করবেন না?

DateTime x; DateTime y;
bool areEqual = (x-y).TotalSeconds == 0;

অথবা

TimeSpan precision = TimeSpan.FromSeconds(1);
bool areEqual = (x-y).Duration() < precision;



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

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



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

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

হয়ে

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

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

Eppsy




DateID.Text = DateTime.Today.ToShortDateString();

Use ToShortDateString() //Date 2-02-2016
Use ToShortDateString() // Time 

এবং ব্যবহার করে

ToLongDateString() // its show 19 February 2016.

: P: P




দ্বিতীয় দিকে বৃত্তাকার করতে:

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

মিনিট পর্যন্ত বৃত্তাকার TicksPerMinute সঙ্গে প্রতিস্থাপন।

আপনার কোড পারফরম্যান্স সংবেদনশীল হয়, সম্পর্কে সতর্ক হতে হবে

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

আমার অ্যাপটি System.DateTime.GetDatePart 12% CPU সময় ব্যয় করছে। System.DateTime.GetDatePartSystem.DateTime.GetDatePart




Related

c# .net datetime