Bagaimana saya bisa mengubah hanya waktu dalam DateTime
variabel "s" saya?
DateTime s = some datetime;
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 dalam DateTime
dokumen ). 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. Jenisnya ZonedDateTime
dibuat "sadar" dengan menautkannya ke tz
entri basis data .
Add
memberikan rentang waktu nol? Ekspresi Anda setara dengans.Date
, tetapi lebih lama ...DateTime
detik, (satu untuk tanggal dan satu untuk saat itu) Anda dapat melakukan ini:var result = date.Date + time.TimeOfDay;
time
seharusnya tidak menjadiDateTime
. (Tentu saja saya akan menggunakan Noda Time, tapi ...)Baiklah saya menyelam dengan saran saya, metode ekstensi:
Lalu hubungi:
Penting untuk dicatat bahwa ekstensi ini mengembalikan objek tanggal baru , jadi Anda tidak dapat melakukan ini:
Tetapi Anda bisa melakukan ini:
sumber
Datetime.Today.Add(time.TimeOfDay)
. Itu karena secara internal, konstruktor tidak melakukan koreksi berbasis kalender kecuali menghitung tahun kabisat untuk bagian tanggal. YaituDateTime
adalah implementasi "naif" dalam haldatetime
modul Python .Dengan cara ini Anda mempertahankan tanggal Anda, sambil menyisipkan bagian jam, menit, dan detik baru sesuai keinginan Anda.
sumber
.AddMilliseconds()
jika diperlukan.satu liner
akan mengembalikan tanggal todays dengan waktu 4:30:00, ganti DateTime. Sekarang dengan objek tanggal
sumber
DateTime adalah tipe yang tidak bisa diubah, jadi Anda tidak bisa berubah .
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:
sumber
Jika Anda sudah memiliki waktu yang tersimpan di
DateTime
objek lain, Anda dapat menggunakanAdd
metode ini.The
TimeOfDay
properti adalahTimeSpan
objek dan dapat diteruskan keAdd
metode. Dan karena kita menggunakanDate
propertidateToUse
variabel kita hanya mendapatkan tanggal dan menambahkan rentang waktu.sumber
Solusi paling sederhana:
Dan jika Anda memerlukan Format Tanggal dan Waktu tertentu:
sumber
Dieksekusi: Hari ini = 9/04/15 00:00:00
sumber
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
sumber
Karena
DateTime
tidak dapat diubah, instance baru harus dibuat ketika komponen tanggal perlu diubah. Sayangnya, tidak ada fungsi bawaan untuk mengatur komponen individual aDateTime
instance.Menggunakan metode ekstensi berikut
Anda dapat mengatur
DateTime
komponen individual sukasumber
Jika Anda memiliki DateTime seperti 2014/02/05 18:19:51 dan hanya ingin 2014/02/05, Anda dapat melakukannya:
sumber
Menambahkan. Tanggal ke tanggal Anda menyetelnya ke tengah malam (00:00).
Catatan SQL ekuivalen 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:
Tentu saja Anda dapat mengganti DateTime. Sekarang atau MyDate dengan tanggal pilihan Anda.
sumber
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:
sumber
sumber
Gunakan
Date.Add
dan tambahkanNew TimeSpan
dengan waktu baru yang ingin Anda tambahkansumber
Saat Anda membuat
DateTime
objek, gunakan konstruktor yang memungkinkan Anda menentukan waktu:Jika Anda sudah memiliki
DateTime
objek dan ingin mengubah waktu, Anda dapat menambahkan menit, jam, atau detik ke AndaDateTime
menggunakan metode sederhana:Perhatikan bagaimana kita harus "menyimpan" hasil dari setiap pemanggilan metode ke
myDateTime
variabel. Ini karenaDateTime
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 kode
TimeSpan
asliDateTime
:Jika Anda ingin menetapkan jam / minue / detik absolut, daripada menambahkan nilai yang ada, Anda dapat menggunakan
DateTime
konstruktor yang disebutkan di atas , dan menggunakan kembali nilai untuk tahun / bulan / hari dari sebelumnya:sumber
Berikut adalah metode yang dapat Anda gunakan untuk melakukannya untuk Anda, gunakan seperti ini
Inilah metodenya, mungkin ada cara yang lebih baik, tapi saya baru saja membahasnya:
sumber
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:
sumber
sumber
Anda dapat menetapkan nilai awal ke
DateTime
nilai baru dengan berbagai cara:Metode ekstensi
DateTime
lalu gunakan
ChangeTime
:menggunakan metode Tambahkan
menggunakan Timespan
menggunakan nilai awal
sumber
Apa yang salah dengan metode DateTime.AddSeconds di mana Anda dapat menambah atau mengurangi detik?
sumber
Anda bisa menambahkan + ve / -ve nilai dalam parameter.
sumber
Bukankah itu memperbaiki masalah Anda ??
sumber
Saya lebih memilih ini:
sumber
Gunakan seperti ini:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
ini harus dikembalikan: 2016-06-06 00: 00: 00.000
sumber
Solusi terbaik adalah:
sumber
Coba yang ini
sumber
di sini adalah cara ghetto, tetapi ia bekerja :)
sumber
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
tetapi tidak akan merekomendasikannya.