Cách tốt nhất để tạo Midnight DateTime trong C #


79

Tôi cần tạo DateTime lúc nửa đêm

Tôi vừa làm điều này:

DateTime endTime = DateTime.Now;
endTime.Subtract(endTime.TimeOfDay);

Chưa thử nghiệm nó, tôi đang cho rằng nó hoạt động nhưng có cách nào tốt hơn / sạch hơn không?

Câu trả lời:


167

Chỉ sử dụng foo.Datehoặc DateTime.Todaycho ngày hôm nay


1
Điều đáng xem xét là mọi người thường nghĩ nửa đêm là giây cuối cùng trong ngày, trong khi điều này cho thấy giây đầu tiên trong ngày (một nửa đêm khác). Vì vậy, nếu bạn có ý định thực hiện ý nghĩa phổ biến của nửa đêm, vui lòng xem câu trả lời Aruna của dưới đây (và bình luận Paul Suart của)
jdoer1997

@ jdoer1997 - Nó phụ thuộc vào những gì ứng dụng của bạn cần làm vào lúc nửa đêm. Các ứng dụng phụ thuộc vào ngày tháng, ngày trong tuần, v.v. có thể muốn thực hiện các nhiệm vụ trông nhà ngay từ lần đánh dấu đầu tiên vào ngày mới.
LT Dan


15
DateTime endTime = DateTime.Now.Date;

Bây giờ endTime.TimeOfDay.ToString()trở lại"00:00:00"



11

Bạn có thể sử dụng DateTime.Todayvới số giây chính xác của nửa đêm.

    DateTime today = DateTime.Today;
    DateTime mid = today.AddDays(1).AddSeconds(-1);
    Console.WriteLine(string.Format("Today: {0} , Mid Night: {1}", today.ToString(), mid.ToString()));

    Console.ReadLine();

Điều này sẽ in:

Today: 11/24/2016 10:00:00 AM , Mid Night: 11/24/2016 11:59:59 PM

Điều này đã giúp rất nhiều và đó là chính xác những gì tôi muốn
Matthias McCarthy

4
Nửa đêm là giây đầu tiên - đó là giây đầu tiên trong ngày, không phải cuối cùng.
Paul Suart

0
var dateMidnight = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMdd"), "yyyyMMdd", CultureInfo.InvariantCulture);

3
Ngoài việc cung cấp một số mã, vui lòng thêm một số chi tiết bổ sung về lý do tại sao giải pháp của bạn hoạt động và nó khác với các giải pháp trước đó như thế nào.
wlh

-1
    private bool IsServiceDatabaseProcessReadyToStart()
    {
        bool isGoodParms = true;
        DateTime currentTime = DateTime.Now;
        //24 Hour Clock
        string[] timeSpan = currentTime.ToString("HH:mm:ss").Split(':');
        //Default to Noon
        int hr = 12;
        int mn = 0;
        int sc = 0;

        if (!string.IsNullOrEmpty(timeSpan[0]))
        {
            hr = Convert.ToInt32(timeSpan[0]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[1]))
        {
            mn = Convert.ToInt32(timeSpan[1]);
        }
        else
        {
            isGoodParms = false;
        }

        if (!string.IsNullOrEmpty(timeSpan[2]))
        {
            sc = Convert.ToInt32(timeSpan[2]);
        }
        else
        {
            isGoodParms = false;
        }

        if (isGoodParms == true )
        {
            TimeSpan currentTimeSpan = new TimeSpan(hr, mn, sc);
            TimeSpan minTimeSpan = new TimeSpan(0, 0, 0);
            TimeSpan maxTimeSpan = new TimeSpan(0, 04, 59);
            if (currentTimeSpan >= minTimeSpan && currentTimeSpan <= maxTimeSpan)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

Chào mừng bạn đến với StackOverflow. Ngoài việc cung cấp một số mã, vui lòng cung cấp thêm một số chi tiết về lý do tại sao giải pháp của bạn hoạt động và nó khác với các giải pháp trước đó như thế nào.
buczek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.