ডেটটাইমে সময় কীভাবে পরিবর্তন করবেন?


353

আমি কীভাবে আমার DateTimeপরিবর্তনশীল "গুলি" এর সময় পরিবর্তন করতে পারি ?

DateTime s = some datetime;

উত্তর:


598

আপনি একটি ডেটটাইম মান পরিবর্তন করতে পারবেন না - এটি পরিবর্তনযোগ্য। তবে আপনি ভেরিয়েবলটিকে নতুন মান হিসাবে পরিবর্তন করতে পারেন। ঠিক সময় পরিবর্তনের জন্য এটি করার সহজতম উপায় হ'ল প্রাসঙ্গিক সময়ের সাথে একটি টাইমস্প্যান তৈরি করা এবং ডেটটাইম. তারিখের সম্পত্তিটি ব্যবহার করা:

DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;

s এখন একই তারিখটি হবে, তবে সকাল দশটায়।

নোট করুন যে DateTimeউভয় দিকের "নিষ্পাপ" গ্রেগরিয়ান সময়কে উপস্থাপন করে দিবালোক সংরক্ষণের সময় ট্রানজিশনগুলিকে উপেক্ষা করে ( DateTimeদস্তাবেজের মন্তব্যগুলি বিভাগ দেখুন )। শুধুমাত্র ব্যতিক্রম আছে .Nowএবং .Todayতারা বর্তমান সিস্টেমের সময় এই ঘটনাসমূহ প্রতিফলিত হিসাবে তারা ঘটতে উদ্ধার।

এই ধরণের জিনিসটি আমাকে নোদা টাইম প্রকল্প শুরু করতে উদ্বুদ্ধ করেছিল , যা এখন উত্পাদন প্রস্তুত production এটির একটি ডাটাবেস এন্ট্রি এর সাথে সংযুক্ত করেZonedDateTime "সচেতন" করা হয়tz


11
s.Date.Add (নতুন টাইমস্প্যান (0, 0, 0)) এও কাজ করা উচিত। দিনের মধ্যে চেক করার সময় এটি অকার্যকর করতে ব্যবহার করে।
দই দ্য ওয়াইজ

8
@ ব্যবহারকারী 295734: আপনি Addশূন্য টাইমস্প্যান সরবরাহ করবেন কেন ? আপনার অভিব্যক্তিটি সমান s.Dateতবে লম্বা ...
জন স্কিটি

এটি সংশোধন করতে ভুলে গিয়েছি, শূন্যে সেট করার জন্য কোডটি রেখে দেওয়ার পরে এটি বুঝতে পেরেছি (আমি মূলত যা খুঁজছিলাম)। তবে আমি কেবল 0 এ সেট না করে কীভাবে এক লাইনে সময় নির্ধারণ করতে হবে তা দেখানোর চেষ্টা করছিলাম
দই দ্য ওয়াইজ

3
আপনার যদি 2 DateTimeটি থাকে, (একটি তারিখের জন্য এবং একটি সময়ের জন্য) আপনি এটি করতে পারেন:var result = date.Date + time.TimeOfDay;
জাচারি ইয়েটস

2
@ জাচারি ইয়েটস: হ্যাঁ, যদিও আমি যুক্তি দিয়েছিলাম যে সেই মুহুর্তে আপনার মডেলটি শুরু হয়ে গেছে এবং timeএটি একটি হওয়া উচিত নয় DateTime। (আমি অবশ্যই নোডা সময়টি ব্যবহার করতাম, তবে ...)
জন স্কিটি

100

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

public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
{
    return new DateTime(
        dateTime.Year,
        dateTime.Month,
        dateTime.Day,
        hours,
        minutes,
        seconds,
        milliseconds,
        dateTime.Kind);
}

তারপরে কল করুন:

DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0);

এটি উল্লেখ করা গুরুত্বপূর্ণ যে এই এক্সটেনশানটি একটি নতুন তারিখের অবজেক্ট দেয়, তাই আপনি এটি করতে পারবেন না:

DateTime myDate = DateTime.Now;
myDate.ChangeTime(10,10,10,0);

তবে আপনি এটি করতে পারেন:

DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);

6
এটি মূলত একই Datetime.Today.Add(time.TimeOfDay)। এটি কারণ অভ্যন্তরীণভাবে, নির্মাণকারীর তারিখের অংশের জন্য একটি লিপ বছরের জন্য অ্যাকাউন্টিং ব্যতীত কোনও ক্যালেন্ডার-ভিত্তিক সংশোধন করে না। অর্থ্যাৎ DateTimeপাইথনের datetimeমডিউলটির ক্ষেত্রে একটি "নিষ্পাপ" বাস্তবায়ন ।
ivan_pozdeev

68
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);

এভাবে আপনার পছন্দ অনুযায়ী নতুন ঘন্টা, মিনিট এবং সেকেন্ডের অংশটি সন্নিবেশ করার সময় আপনি নিজের তারিখটি সংরক্ষণ করেন।


@ ওয়েবেলিউ অবশ্যই যুক্ত হওয়া মানগুলির উপর নির্ভর করে একটি আর্গুমেন্টআউটঅফরাঞ্জইজেশন এর দূরবর্তী সম্ভাবনা । এটি এখানে প্রদর্শিত একটি পেক্স ধাঁধা।
লাইফব্লেন্স

এবং ব্যবহারের ক্ষেত্রে নির্ভর করে, .AddMilliseconds()প্রয়োজনে করতেও পারেন।
ব্রুটস ওয়্যাম্ব

39

এক রৈখিক

var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));

আজকের তারিখটি 4:30:00 সময়ের সাথে ফিরিয়ে আনবে, ডেটটাইম প্রতিস্থাপন করুন। এখন যে কোনও তারিখের অবজেক্টের সাথে প্রতিস্থাপন করুন


22

ডেটটাইম একটি অপরিবর্তনীয় প্রকার, তাই আপনি এটি পরিবর্তন করতে পারবেন না ।

তবে আপনি পূর্ববর্তী উদাহরণের ভিত্তিতে একটি নতুন ডেটটাইম উদাহরণ তৈরি করতে পারেন। আপনার ক্ষেত্রে এটির মতো শোনা যাচ্ছে যে আপনার কাছে তারিখের সম্পত্তি প্রয়োজন এবং আপনি একটি টাইমস্প্যান যোগ করতে পারেন যা দিনের সময়ের প্রতিনিধিত্ব করে।

এটার মতো কিছু:

var newDt = s.Date + TimeSpan.FromHours(2);

17

আপনার যদি ইতিমধ্যে অন্য কোনও DateTimeঅবজেক্টে সঞ্চিত সময় থাকে তবে আপনি Addপদ্ধতিটি ব্যবহার করতে পারেন ।

DateTime dateToUse = DateTime.Now();
DateTime timeToUse = new DateTime(2012, 2, 4, 10, 15, 30); //10:15:30 AM

DateTime dateWithRightTime = dateToUse.Date.Add(timeToUse.TimeOfDay);

TimeOfDayসম্পত্তি একটি হল TimeSpanবস্তু এবং প্রেরণ করা সম্ভব Addপদ্ধতি। এবং যেহেতু আমরা ভেরিয়েবলের Dateসম্পত্তি ব্যবহার dateToUseকরি আমরা কেবল তারিখ পাই এবং সময়সীমা যুক্ত করি।


15

সহজ সমাধান:

DateTime s = //some Datetime that you want to change time for 8:36:44 ;
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44);

এবং আপনার যদি একটি নির্দিষ্ট তারিখ এবং সময় ফর্ম্যাট প্রয়োজন:

s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");

9
DateTime ts = DateTime.Now;
ts = new DateTime ( ts.Year, ts.Month, ts.Day, 0, 0, 0 ) ;
Console.WriteLine ( "Today = " + ts.ToString("M/dd/yy HH:mm:ss") ) ;

কার্যকর করা হয়েছে: আজ = 9/04/15 00:00:00


8

এই পোস্টটি ঘটল কারণ আমি একই কার্যকারিতাটি খুঁজছিলাম কারণ এটি সম্ভবত লোকটি যা চেয়েছিল তা করতে পারে। আসল তারিখটি নিন এবং সময়ের অংশটি প্রতিস্থাপন করুন

DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");

4

যেহেতু DateTimeঅপরিবর্তনীয়, একটি তারিখের উপাদান পরিবর্তন করার প্রয়োজন হলে একটি নতুন উদাহরণ তৈরি করতে হবে। দুর্ভাগ্যক্রমে, কোনও DateTimeউদাহরণের পৃথক উপাদান সেট করার জন্য কোনও অন্তর্নির্মিত কার্যকারিতা নেই ।

নিম্নলিখিত এক্সটেনশন পদ্ধতি ব্যবহার করে

public static DateTime SetPart(this DateTime dateTime, int? year, int? month, int? day, int? hour, int? minute, int? second)
{
    return new DateTime(
        year ?? dateTime.Year,
        month ?? dateTime.Month,
        day ?? dateTime.Day,
        hour ?? dateTime.Hour,
        minute ?? dateTime.Minute,
        second ?? dateTime.Second
    );
}

public static DateTime SetYear(this DateTime dateTime, int year)
{
    return dateTime.SetPart(year, null, null, null, null, null);
}

public static DateTime SetMonth(this DateTime dateTime, int month)
{
    return dateTime.SetPart(null, month, null, null, null, null);
}

public static DateTime SetDay(this DateTime dateTime, int day)
{
    return dateTime.SetPart(null, null, day, null, null, null);
}

public static DateTime SetHour(this DateTime dateTime, int hour)
{
    return dateTime.SetPart(null, null, null, hour, null, null);
}

public static DateTime SetMinute(this DateTime dateTime, int minute)
{
    return dateTime.SetPart(null, null, null, null, minute, null);
}

public static DateTime SetSecond(this DateTime dateTime, int second)
{
    return dateTime.SetPart(null, null, null, null, null, second);
}

আপনি DateTimeযেমন পৃথক উপাদান সেট করতে পারেন

var now = DateTime.Now;

now.SetSecond(0);


3

আপনার তারিখে তারিখ যুক্ত করা এটি মধ্যরাতে (00:00) সেট করে।

MyDate.Date

দ্রষ্টব্য সমতুল্য এসকিউএল হ'লCONVERT(DATETIME, CONVERT(DATE, @MyDate))

এই পদ্ধতিটি কী এত ভাল করে তোলে তা হ'ল এটি টাইপ করা দ্রুত এবং সহজেই পড়া সহজ। একটি বোনাস হ'ল স্ট্রিং থেকে কোনও রূপান্তর নেই।

অর্থাৎ আজকের তারিখ 23:30 এ সেট করতে, ব্যবহার করুন:

DateTime.Now.Date.AddHours(23).AddMinutes(30)

আপনি অবশ্যই ডেটটাইম.নউ বা মাইডেটকে আপনার পছন্দের যে কোনও তারিখের সাথে প্রতিস্থাপন করতে পারেন।


3

আসলে, একবার তৈরি হয়ে গেলে আপনি এটি পরিবর্তন করতে পারবেন না। তবে আপনি এটিকে অনেকগুলি নির্মাণকারীর সাহায্যে সহজেই তৈরি করতে পারেন: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.7

উদাহরণস্বরূপ, আপনি যদি একটি ডেটটাইম পরিবর্তনকারী সেকেন্ড তৈরি করতে চান তবে আপনি কেবল এটি করতে পারেন:

DateTime now = DateTime.Now;
DateTime secondschanged = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, yourseconds);



1

আপনি যখন নিজের DateTimeঅবজেক্টটি বানান, এমন কনস্ট্রাক্টর ব্যবহার করুন যা আপনাকে সময় নির্দিষ্ট করার অনুমতি দেয়:

var myDateTime = new DateTime(2000, 01, 01, 13, 37, 42);  // 2000-01-01 13:37:42

আপনার যদি ইতিমধ্যে কোনও DateTimeঅবজেক্ট থাকে এবং সময় পরিবর্তন করতে চান তবে আপনি DateTimeসাধারণ পদ্ধতিগুলি ব্যবহার করে কয়েক মিনিট, ঘন্টা বা সেকেন্ড যোগ করতে পারেন :

var myDateTime = new DateTime(2000, 01, 01);              // 2000-01-01 00:00:00
myDateTime = myDateTime.AddHours(13);                     // 2000-01-01 13:00:00
myDateTime = myDateTime.AddMinutes(37);                   // 2000-01-01 13:37:00
myDateTime = myDateTime.AddSecounds(42);                  // 2000-01-01 13:37:42

খেয়াল করুন কীভাবে আমাদের myDateTimeভেরিয়েবলের প্রতিটি পদ্ধতি কল থেকে ফলাফল "সংরক্ষণ" করতে হয় । এটি কারণ পরিবর্তনযোগ্য DateTimeএবং এর পদ্ধতিগুলি অতিরিক্ত ঘন্টা / মিনিট / সেকেন্ড যুক্ত হয়ে কেবল নতুন উদাহরণ তৈরি করে।

আপনি উভয় ঘন্টা এবং মিনিট (এবং / অথবা সেকেন্ড) এবং একই সময় যোগ করতে হবে, তাহলে আপনি একটি যোগ করে কোড প্রক্রিয়া সহজ করতে TimeSpanআসল DateTimeপরিবর্তে:

var myDateTime = new DateTime(2000, 01, 01);              // 2000-01-01 00:00:00
myDateTime += new TimeSpan(13, 37, 42);                   // 2000-01-01 13:37:42

আপনি যদি বিদ্যমান মানগুলিকে যুক্ত করার পরিবর্তে নিখুঁত ঘন্টা / মিনিট / সেকেন্ড সেট করতে চান, আপনি পূর্বোক্ত DateTimeনির্মাণকর্তা ব্যবহার করতে পারেন এবং বছর / মাস / দিনের জন্য পূর্বের থেকে মানগুলি পুনরায় ব্যবহার করতে পারেন :

myDateTime = new DateTime(myDateTime.Year, myDateTime.Month, myDateTime.Day,
                          20, 33, 19)                     // 2000-01-01 20:33:19

অ্যাডএক্সএক্সএক্সএক্স পদ্ধতি ব্যবহার করে যোগ করুন এবং বিয়োগ করুন
ক্রিস

1

আপনার পক্ষে এটি করার জন্য আপনি এখানে একটি পদ্ধতি ব্যবহার করতে পারেন, এটি এটি ব্যবহার করুন

DateTime newDataTime = ChangeDateTimePart(oldDateTime, DateTimePart.Seconds, 0);

এখানে পদ্ধতিটি রয়েছে, সম্ভবত এর থেকে আরও ভাল উপায় আছে তবে আমি এইটিকে চাবুক দিয়েছি:

public enum DateTimePart { Years, Months, Days, Hours, Minutes, Seconds };
public DateTime ChangeDateTimePart(DateTime dt, DateTimePart part, int newValue)
{
    return new DateTime(
        part == DateTimePart.Years ? newValue : dt.Year,
        part == DateTimePart.Months ? newValue : dt.Month,
        part == DateTimePart.Days ? newValue : dt.Day,
        part == DateTimePart.Hours ? newValue : dt.Hour,
        part == DateTimePart.Minutes ? newValue : dt.Minute,
        part == DateTimePart.Seconds ? newValue : dt.Second
        );
}

1

আমি কেবল এই পোস্টটি জুড়ে এসেছি কারণ আমার একই ধরণের সমস্যা হয়েছিল যার ফলে আমি এমভিসিতে একটি সত্ত্বা ফ্রেমওয়ার্ক অবজেক্টের জন্য সময় নির্ধারণ করতে চেয়েছিলাম যা একটি ভিউ (তারিখপিকার) থেকে তারিখ পায় তাই সময় উপাদানটি 00:00:00 তবে আমার দরকার এটি বর্তমান সময় হতে হবে। এই পোস্টে উত্তরগুলির ভিত্তিতে আমি এলাম:

myEntity.FromDate += DateTime.Now.TimeOfDay;

1
//The fastest way to copy time            

DateTime justDate = new DateTime(2011, 1, 1); // 1/1/2011 12:00:00AM the date you will be adding time to, time ticks = 0
DateTime timeSource = new DateTime(1999, 2, 4, 10, 15, 30); // 2/4/1999 10:15:30AM - time tick = x

justDate = new DateTime(justDate.Date.Ticks + timeSource.TimeOfDay.Ticks);

Console.WriteLine(justDate); // 1/1/2011 10:15:30AM
Console.Read();

1

আপনি DateTimeবিভিন্ন মূল উপায়ে একটি নতুন মানকে প্রাথমিক মূল্য নির্ধারণ করতে পারেন :

  • সম্প্রসারণ পদ্ধতি

সম্প্রসারণ পদ্ধতি DateTime

    public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds = default, int milliseconds = default)
    {
        return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, hours, minutes, seconds, milliseconds, dateTime.Kind);
    }

তারপরে ChangeTime:

    DateTime datetime = DateTime.Now; //Your DateTime
    datetime = datetime.ChangeTime(12, 20, 10);
  • অ্যাড পদ্ধতি ব্যবহার করে

    DateTime datetime = DateTime.Now; //Your DateTime
    datetime = datetime.Date.AddHours(12).AddMinutes(20).AddSeconds(10);
  • টাইমস্প্যান ব্যবহার করে

    DateTime datetime = DateTime.Now; //Your DateTime
    datetime = datetime.Date.Add(new TimeSpan(12, 20, 10));
  • প্রাথমিক মান ব্যবহার করে

    DateTime datetime = DateTime.Now;
    datetime = new DateTime(datetime.Year, datetime.Month, datetime.Day, 12, 20, 10);

0

ডেটটাইম.এডসেকেন্ডস পদ্ধতিতে আপনি কী সেকেন্ডে যোগ বা বিয়োগ করতে পারবেন?


কেবল তা-ই নয়, এটি যেভাবেই প্রশ্নের উত্তর দেয় বলে মনে হয় না। আমি সন্দেহ করি যে ওপি একই তারিখের সাথে একটি ডেটটাইম চায় তবে একটি নির্দিষ্ট সময় - যা কেবল অ্যাডসেকেন্ডগুলি ব্যবহার করা তুলনামূলকভাবে শক্ত।
জন স্কিটি

0
  DateTime s;
//s = datevalue
                s = s.AddMilliseconds(10);
                s = s.AddMinutes(10);
                s = s.AddSeconds(10);
                s = s.AddHours(10);

আপনি প্যারামিটারে + ve / -ve মান যোগ করতে পারেন।

s.Add(new TimeSpan(1, 1, 1));

@ জন: আমি লাইনে মন্তব্য করেছি। এই কোডটি ব্যবহার করার আগে ব্যবহারকারীর কিছু মূল্য নির্ধারণ করতে হবে।
সার

@ সাআর: আরও গুরুত্বপূর্ণ, আপনি এখন অ্যাসাইনমেন্টগুলি আবার যুক্ত করেছেন (এস কলটি ছাড়াই (যোগ করুন ...))।
জন স্কিটি 11

@ জন: আমি আমার পাঠ শিখেছি। আপনার সদয় এবং সময় জন্য ধন্যবাদ। আমি সত্যিই এটা বুঝাচ্ছি.
সারা



0
 Using an extencion to DateTime:  

        public enum eTimeFragment
        {
            hours,
            minutes,
            seconds,
            milliseconds
        }
        public static DateTime ClearTimeFrom(this DateTime dateToClear, eTimeFragment etf)
        {
            DateTime dtRet = dateToClear;
            switch (etf)
            {
                case eTimeFragment.hours:
                    dtRet = dateToClear.Date;
                    break;
                case eTimeFragment.minutes:
                    dtRet = dateToClear.AddMinutes(dateToClear.Minute * -1);
                    dtRet = dtRet.ClearTimeFrom(eTimeFragment.seconds);
                    break;
                case eTimeFragment.seconds:
                    dtRet = dateToClear.AddSeconds(dateToClear.Second * -1);
                    dtRet = dtRet.ClearTimeFrom(eTimeFragment.milliseconds);
                    break;
                case eTimeFragment.milliseconds:
                    dtRet = dateToClear.AddMilliseconds(dateToClear.Millisecond * -1);
                    break;
            }
            return dtRet;

        }

এটি ব্যবহার করুন:

কনসোল.ওরাইটলাইন (ডেটটাইম.নো।

এটি ফিরতে হবে: 2016-06-06 00: 00: 00.000


-1

সর্বোত্তম সমাধানটি হ'ল:

currdate.AddMilliseconds(currdate.Millisecond * -1).AddSeconds(currdate.Second * -1).AddMinutes(currdate.Minute * -1).AddHours(currdate.Hour * -1);

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

1
অবশ্যই "সেরা" নয়। পঠনযোগ্য এবং যাদুর সংখ্যা পুনরাবৃত্তিমূলক ব্যবহারের থেকে দূরে।
বার্তোসকেপিপি

-1

আর একবার চেষ্টা কর

var NewDate = Convert.ToDateTime(DateTime.Now.ToString("dd/MMM/yyyy")+" "+"10:15 PM")/*Add your time here*/;

-5

এখানে একটি ঘেটো উপায়, কিন্তু এটি কাজ করে :)

DateTime dt = DateTime.Now; //get a DateTime variable for the example
string newSecondsValue = "00";
dt = Convert.ToDateTime(dt.ToString("MM/dd/yyyy hh:mm:" + newSecondsValue));

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