जवाबों:
आप दिनांक समय मान नहीं बदल सकते - यह अपरिवर्तनीय है। हालाँकि, आप नया मान रखने के लिए चर को बदल सकते हैं। ऐसा करने का सबसे आसान तरीका है कि बस समय बदलने के लिए संबंधित समय के साथ एक TimeSpan बनाना है, और DateTime.Date संपत्ति का उपयोग करें:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
अब वही तारीख होगी, लेकिन सुबह 10.30 बजे।
ध्यान दें कि DateTime
डेलाइट सेविंग टाइम ट्रांज़ेक्शन की अवहेलना करते हैं, दोनों दिशाओं में "भोले" ग्रेगोरियन समय का प्रतिनिधित्व करते हैं ( DateTime
डॉक्स में रिमार्क्स अनुभाग देखें )। एकमात्र अपवाद हैं .Now
और .Today
: वे वर्तमान सिस्टम समय को पुनः प्राप्त करते हैं जो इन घटनाओं को दर्शाता है जैसे वे होते हैं।
यह उस तरह की बात है जिसने मुझे नोडा टाइम परियोजना शुरू करने के लिए प्रेरित किया, जो अब उत्पादन के लिए तैयार है। इसका ZonedDateTime
प्रकार एक tz
डेटाबेस प्रविष्टि से जोड़कर "जागरूक" किया जाता है ।
Add
एक शून्य समय प्रदान करने को क्यों कहेंगे ? आपकी अभिव्यक्ति के बराबर है s.Date
, लेकिन अब ...
DateTime
एस हैं, (तारीख के लिए एक और समय के लिए एक) आप ऐसा कर सकते हैं:var result = date.Date + time.TimeOfDay;
time
नहीं होना चाहिए DateTime
। (मैं Noda Time का इस्तेमाल जरूर करूँगा, लेकिन ...)
ठीक है, मैं अपने सुझाव के साथ डाइविंग कर रहा हूं, एक विस्तार विधि:
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);
Datetime.Today.Add(time.TimeOfDay)
। ऐसा इसलिए है क्योंकि आंतरिक रूप से, निर्माणकर्ता तारीख वाले भाग के लिए लीप वर्ष के लिए लेखांकन के अलावा कोई कैलेंडर-आधारित सुधार नहीं करता है। DateTime
पायथन के datetime
मॉड्यूल के संदर्भ में Ie एक "भोली" कार्यान्वयन है ।
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);
इस तरह आप अपनी तिथि को संरक्षित करते हैं, जबकि अपनी पसंद के अनुसार एक नया घंटे, मिनट और सेकंड का हिस्सा सम्मिलित करते हैं।
.AddMilliseconds()
यदि आवश्यक हो तो भी कर सकते हैं ।
एक लाइन
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
आज दिनांक 4:30:00 के समय के साथ वापस लाएगा, DateTime.Now को किसी दिनांक ऑब्जेक्ट के साथ बदल देगा
डेटटाइम एक अपरिवर्तनीय प्रकार है, इसलिए आप इसे बदल नहीं सकते ।
हालाँकि, आप अपने पिछले उदाहरण के आधार पर एक नया DateTime उदाहरण बना सकते हैं। आपके मामले में, ऐसा लगता है कि आपको दिनांक संपत्ति की आवश्यकता है, और आप तब एक TimeSpan जोड़ सकते हैं जो दिन के समय का प्रतिनिधित्व करता है।
कुछ इस तरह:
var newDt = s.Date + TimeSpan.FromHours(2);
यदि आपके पास पहले से ही किसी अन्य 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
केवल तारीख मिलती है और समय अवधि मिलती है।
सबसे सरल समाधान:
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");
इस पोस्ट पर हुआ जैसा कि मैं उसी कार्यक्षमता के लिए देख रहा था यह संभवतः वह कर सकता था जो लड़का चाहता था। मूल तिथि ले लो और समय भाग की जगह
DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
चूँकि 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);
अगर आपके पास 2014/02/05 18:19:51 जैसी डेटटाइम है और आप 2014/02/05 चाहते हैं, तो आप ऐसा कर सकते हैं:
_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
जोड़ना। अपनी तिथि के अनुसार इसे आधी रात (00:00) पर सेट करें।
MyDate.Date
नोट समतुल्य SQL हैCONVERT(DATETIME, CONVERT(DATE, @MyDate))
इस पद्धति को इतना अच्छा बनाता है कि यह टाइप करने के लिए त्वरित और पढ़ने में आसान है। एक बोनस यह है कि तार से कोई रूपांतरण नहीं है।
आज की तारीख को 23:30 बजे सेट करने के लिए, उपयोग करें:
DateTime.Now.Date.AddHours(23).AddMinutes(30)
आप निश्चित रूप से DateTime.Now या MyDate को अपनी पसंद की किसी भी तारीख से बदल सकते हैं।
वास्तव में, आप इसे बनाते समय समय नहीं बदल सकते। लेकिन आप इसे कई कंस्ट्रक्टरों के साथ आसानी से बना सकते हैं: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
उदाहरण के लिए, यदि आप एक डेटटाइम चेंजिंग सेकंड बनाना चाहते हैं, तो आप यह कर सकते हैं:
DateTime now = DateTime.Now;
DateTime secondschanged = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, yourseconds);
जो नया समय आप जोड़ना चाहते हैं, उसके साथ प्रयोग करें Date.Add
और New TimeSpan
जोड़ें
DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
जब आप अपने 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
यहां एक विधि है जो आप इसे आपके लिए करने के लिए उपयोग कर सकते हैं, इसे इस तरह से उपयोग करें
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
);
}
मैं अभी इस पोस्ट पर आया हूं क्योंकि मेरे पास एक समान मुद्दा था जिसके तहत मैं एमवीसी में एक इकाई फ्रेमवर्क ऑब्जेक्ट के लिए समय निर्धारित करना चाहता था जो कि एक दृश्य (दिनांक) से दिनांक प्राप्त करता है इसलिए समय घटक 00:00:00 है लेकिन मुझे चाहिए यह वर्तमान समय है। इस पोस्ट में उत्तर के आधार पर मैं आया:
myEntity.FromDate += DateTime.Now.TimeOfDay;
//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();
आप एक नए 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);
Timespan का उपयोग करना
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);
DateTime.AddSeconds पद्धति में क्या गलत है जहां आप सेकंड जोड़ या बदल सकते हैं?
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));
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;
}
इस तरह का उपयोग करें:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
इसे वापस करना होगा: 2016-06-06 00: 00: 00.000
सबसे अच्छा समाधान है:
currdate.AddMilliseconds(currdate.Millisecond * -1).AddSeconds(currdate.Second * -1).AddMinutes(currdate.Minute * -1).AddHours(currdate.Hour * -1);
यहाँ एक यहूदी बस्ती रास्ता है, लेकिन यह काम करता है :)
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)
लेकिन इसकी अनुशंसा नहीं करेंगे।