it-swarm.asia

Bagaimana cara mengubah waktu di DateTime?

Bagaimana saya bisa mengubah hanya waktu dalam variabel DateTime saya "s"?

DateTime s = some datetime;
314
Santhosh

Anda tidak dapat mengubah nilai DateTime - tidak dapat diubah. Namun, Anda dapat mengubah variabel untuk memiliki nilai baru. Cara termudah untuk melakukan itu hanya mengubah waktu adalah membuat TimeSpan dengan waktu yang relevan, dan menggunakan properti DateTime.Date:

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

s sekarang akan menjadi tanggal yang sama, tetapi pukul 10.30 pagi.

Perhatikan bahwa DateTime mengabaikan transisi waktu musim panas, mewakili waktu Gregorian "naif" di kedua arah (lihat bagian Keterangan di DateTime docs ). Satu-satunya pengecualian adalah .Now dan .Today: mereka mengambil waktu sistem saat ini yang mencerminkan peristiwa ini saat terjadi.

Ini adalah hal yang memotivasi saya untuk memulai proyek Noda Time , yang sekarang sudah siap produksi. Tipe ZonedDateTime dibuat "aware" dengan menautkannya ke entri basis data tz .

532
Jon Skeet

Baiklah saya menyelam dengan saran saya, metode ekstensi:

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

Lalu hubungi:

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

Penting untuk dicatat bahwa ekstensi ini mengembalikan a baru objek tanggal, jadi Anda tidak bisa melakukan ini:

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

Tetapi Anda bisa melakukan ini:

DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);
89
joshcomley
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);

Dengan cara ini Anda mempertahankan tanggal Anda, sambil menyisipkan bagian jam, menit, dan detik baru sesuai keinginan Anda.

61
Webleeuw

satu liner

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

akan membawa kembali tanggal todays dengan waktu 4:30:00, ganti DateTime. Sekarang dengan objek tanggal

27
Carl Woodhouse

DateTime adalah tipe yang tidak dapat diubah, jadi Anda tidak bisa bah.

Namun, Anda dapat membuat instance DateTime baru berdasarkan instance sebelumnya. Dalam kasus Anda, sepertinya Anda memerlukan properti Date, dan Anda kemudian dapat menambahkan TimeSpan yang mewakili waktu dalam sehari.

Sesuatu seperti ini:

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

Jika Anda sudah memiliki waktu yang tersimpan di objek DateTime lain, Anda dapat menggunakan metode 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);

Properti TimeOfDay adalah objek TimeSpan dan dapat dikirimkan ke metode Add. Dan karena kita menggunakan properti Date dari variabel dateToUse kita hanya mendapatkan tanggal dan menambahkan rentang waktu.

15
ShaneA

Solusi paling sederhana:

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

Dan jika Anda memerlukan Format Tanggal dan Waktu tertentu:

s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");
11
Mr Rubix
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") ) ;

Dieksekusi: Hari ini = 9/04/15 00:00:00

8
philip

Terjadi pada posting ini karena saya sedang mencari fungsi yang sama ini mungkin bisa melakukan apa yang diinginkan orang itu. Ambil tanggal asli dan ganti bagian waktu

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

Bahkan, Anda tidak dapat mengubah waktu setelah itu dibuat. Tetapi Anda dapat membuatnya dengan mudah dengan banyak konstruktor: https://docs.Microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2

Misalnya, jika Anda ingin membuat DateTime yang mengubah Seconds, Anda bisa melakukan ini:

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

Menambahkan. Tanggal ke tanggal Anda menyetelnya ke tengah malam (00:00).

MyDate.Date

Catatan SQL equivavalent adalah CONVERT(DATETIME, CONVERT(DATE, @MyDate))

Apa yang membuat metode ini begitu baik adalah bahwa cara mengetiknya cepat dan mudah dibaca. Bonusnya adalah tidak ada konversi dari string.

Yaitu. Untuk mengatur tanggal hari ini ke 23:30, gunakan:

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

Tentu saja Anda dapat mengganti DateTime. Sekarang atau MyDate dengan tanggal pilihan Anda.

3

Jika Anda memiliki DateTime seperti 2014/02/05 18:19:51 dan hanya ingin 2014/02/05, Anda dapat melakukannya:

_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
3

Gunakan Date.Add dan tambahkan New TimeSpan dengan waktu baru yang ingin Anda tambahkan

DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
2

Karena DateTime tidak dapat diubah, instance baru harus dibuat ketika komponen tanggal perlu diubah. Sayangnya, tidak ada fungsi bawaan untuk mengatur komponen individual dari instance DateTime.

Menggunakan metode ekstensi berikut

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

anda dapat mengatur seperti komponen DateTime individu

var now = DateTime.Now;

now.SetSecond(0);
2
solidsparrow
int year = 2012;
int month = 12;
int day = 24;
int hour = 0;
int min = 0;
int second = 23;
DateTime dt = new DateTime(year, month, day, hour, min, second);
2
Sagar Rawal

Berikut adalah metode yang dapat Anda gunakan untuk melakukannya untuk Anda, gunakan seperti ini

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

Inilah metodenya, mungkin ada cara yang lebih baik, tapi saya baru saja membahasnya:

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
naspinski
//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
Pawel Cioch

Saya baru saja menemukan posting ini karena saya memiliki masalah serupa di mana saya ingin mengatur waktu untuk objek Kerangka Entitas di MVC yang mendapatkan tanggal dari tampilan (datepicker) sehingga komponen waktu adalah 00:00:00 tetapi saya perlu itu menjadi waktu saat ini. Berdasarkan jawaban dalam posting ini saya datang dengan:

myEntity.FromDate += DateTime.Now.TimeOfDay;
1
Rob

Saya lebih memilih ini:

DateTime s = //get some datetime;
s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0);
0
andrew
 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;

        }

Gunakan seperti ini:

Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))

ini harus dikembalikan: 2016-06-06 00: 00: 00.000

0

Apa yang salah dengan metode DateTime.AddSeconds di mana Anda dapat menambah atau mengurangi detik?

0
Chris Richner

Saat Anda membuat objek DateTime Anda, gunakan konstruktor yang memungkinkan Anda menentukan waktu:

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

Jika Anda sudah memiliki objek DateTime dan ingin mengubah waktu, Anda dapat menambahkan menit, jam, atau detik ke DateTime Anda menggunakan metode sederhana:

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

Perhatikan bagaimana kita harus "menyimpan" hasil dari setiap pemanggilan metode ke variabel myDateTime. Ini karena DateTime tidak dapat diubah, dan metodenya cukup membuat instance baru dengan tambahan jam/menit/detik.

Jika Anda perlu menambahkan jam dan menit (dan/atau detik) dan waktu yang sama, Anda dapat menyederhanakan kode dengan menambahkan TimeSpan ke DateTime asli sebagai gantinya:

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

Jika Anda ingin menetapkan jam absolut/tambang/detik, alih-alih menambahkan nilai yang ada, Anda dapat menggunakan konstruktor DateTime tersebut di atas, dan menggunakan kembali nilai untuk tahun/bulan/hari dari sebelumnya:

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

Bukankah itu memperbaiki masalah Anda ??

Dateime dt = DateTime.Now;
dt = dt.AddSeconds(10);
0
Naveed Butt