2011-01-27 42 views
7
DateTime a1 = new DateTime(Convert.ToDateTime(txtStartDate.Text).Year, Convert.ToDateTime(txtStartDate.Text).Month, Convert.ToDateTime(txtStartDate.Text).Day, 0, 0, 0); 

Tôi đã cố gắng để thay đổi thời gian hệ thống từ 12 giờ đến 24 giờ hh HH và khởi động lại web site chèn vẫn là 12:00:00Cách đặt giờ ngày bằng HH: mm: ss = 00:00:00 thay vì 12:00:00?

Tôi muốn 00:00:00

Trả lời

7

gì bạn đang xem lại là một vấn đề về số chứ không phải là số dữ liệu. Nó thực sự là 00:00:00, nhưng tuy nhiên bạn đang chuyển đổi nó thành một chuỗi được hiển thị nó như 12:00:00, có lẽ với một ngầm "am". Đừng quên rằng DateTime không thực sự là một định dạng trong đó - đó chỉ là ngày/giờ. Bạn có thể định dạng chính xác nó một cách thích hợp, ví dụ:

Console.WriteLine(a1.ToString("yyyy-MM-dd HH:mm:ss")); 

Tất cả điều này sang một bên, tôi thực sự khuyên bạn không nên tạo DateTime theo cách này. Cá nhân tôi thích sử dụng DateTime.TryParseExact hoặc DateTime.ParseExact, thay vì sử dụng "bất kỳ kiểu văn hóa hiện tại nào sẽ thích", nhưng ngay cả khi bạn làm muốn phân tích cú pháp với Convert.ToDateTime, sẽ rõ ràng hơn để làm điều đó một lần và sau đó sử dụng Date bất động sản để có được một DateTime với thời gian thiết lập để 0:

DateTime a1 = Convert.ToDateTime(txtStartDate.Text).Date; 
1

Vâng, về mặt kỹ thuật không có thời gian như 0:00:00. Sau 11:59:59, nó sẽ trở thành 12:00:00. Có lẽ tôi chỉ không hiểu những gì bạn đang cố gắng làm :)

Bạn có thể có logic đặc biệt trong mã của bạn để sửa đổi nó sao cho nếu là 12:00:00, sau đó hiển thị nó là 00:00: 00 hoặc một cái gì đó. Nhưng ra khỏi hộp không có ma thuật hoặc chuỗi định dạng sẽ làm điều này.

+2

sai. 12:00 lúc nửa đêm (12:00 sáng) thực sự là 00:00:00 theo định dạng đồng hồ 24 giờ. – Yogesh

+0

@Yogesh, tôi biết điều đó. Tôi đoán tôi không hiểu câu hỏi. Tôi nghĩ HH là cách để đại diện cho chế độ 24 giờ và nó không có gì để làm với thời gian hệ thống. Vì vậy, đó là tất cả những gì về. –

1

Bạn có thể đơn giản hóa một chút bằng cách xác định một định dạng:

DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", "01/27/2011"), 
             CultureInfo.GetCultureInfo("en-US")); 

Tôi không biết những gì định dạng textbox của bạn, nhưng giả sử nó là 2011/01/27 (định dạng Mỹ), bạn có thể thay đổi trên đoạn để làm việc một cách dễ dàng:

DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", txtStartDate.Text), 
             CultureInfo.GetCultureInfo("en-US")); 

Thay đổi của bạn CultureInfo.GetCultureInfo (nó thực hiện IFormatProvider) đến một trong những bạn đang sử dụng. Lý tưởng nhất là bạn nên phân tích ngày thành ngày UTC nhưng đó là một cuộc thảo luận khác.

datetime

0

Khi bạn muốn thêm một đối tượng DateTime cho một chuỗi hoặc muốn hiển thị nó trong một số hình thức văn bản, ToString() - Phương pháp được sử dụng tự động. ToString() sử dụng "en-US" làm văn bản mặc định. Ofcourse bạn có thể tự gọi ToString() và parametrise nó với bất kỳ CultureInfo bạn muốn nhưng đôi khi đó là không thể.

Khi bạn truy cập đối tượng DateTime thông qua Databinding chẳng hạn, bạn không thể chuyển bất kỳ CultureInfo nào và kết thúc bằng chuỗi ngày được bản địa hóa trong "en-US". Trong trường hợp này bạn cần phải thiết lập các CultureInfo cho thread hiện hành như:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); 

Sau dòng này được gọi là tất cả các ngày sẽ được định vị trong "de-DE" miễn là bạn không tự gọi ToString() với một CultureInfo khác.

Có một chi vào liên kết này: https://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110).aspx

0

Bạn có thể đơn giản hóa mà

if (!string.IsNullOrEmpty(txtStartDate.Text)) 
      { 
       string startDate = Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); 
      } 
Các vấn đề liên quan