2009-12-08 49 views
9

Khi cố gắng sử dụng các phương pháp Parse trên lớp DateTime tôi nhận được một ngoại lệ ném:NET DateTime.Parse

Chuỗi không được công nhận là một DateTime hợp lệ.

  • Chuỗi đọc là "26/10/2009 8:47:39 AM" khi xuất.
  • Chuỗi này được lấy từ một nhóm trên một trận đấu từ một regex.
  • Không có chuỗi nào thu được từ nhóm đối sánh này sẽ phân tích thành datetime. (WTF?)

Ví dụ về chuỗi khác:

 
26/10/2009 8:47:39 AM 
26/10/2009 8:00:41 AM 
26/10/2009 7:48:35 AM 

Điều lạ là, tôi chắc chắn nó đã làm việc trước khi >__<

+0

Cài đặt ngôn ngữ của bạn trong cửa sổ được đặt chính xác chưa? –

+0

Yeh nhưng ứng dụng đang được chạy dưới dạng dịch vụ và hồ sơ của người dùng đang chạy dịch vụ không. :) – Matthew

Trả lời

11

Parse cài đặt khu vực (văn hóa của chuỗi hiện hành) vào tài khoản. Do đó, tôi muốn sử dụng ParseExact và chỉ định đúng định dạng với văn hóa bất biến (hoặc văn hóa bạn cần, ví dụ: en-US, cho AM/PM).

2

đã các culure thay đổi trên máy tính này? 26/10/2009 là ngày tốt ở Vương quốc Anh nhưng có ngày Mỹ xấu (ví dụ)

+0

Điều đó thực sự đã xảy ra với tôi. Ngày giờ.parse dường như có tình trạng quá tải cho định dạng thời gian văn hóa. Chỉ cần cố gắng tìm hiểu cách sử dụng nó ngay bây giờ :) Cảm ơn sự giúp đỡ của bạn. – Matthew

2

Hoặc gọi DateTime.Parse() với nền văn hóa như một tham số hoặc gọi DateTime.ParseExact() với ngày, định dạng chính xác của ngày để phân tích, và văn hóa:

DateTime.ParseExact()

24

Phân tích chuỗi thành đối tượng DateTime hầu như luôn là một cơn đau. Nếu bạn biết chắc chắn rằng họ sẽ luôn có định dạng như ví dụ của bạn, điều này sẽ hoạt động:

string input = "26/10/2009 8:00:41 AM"; 
DateTime dateTime = DateTime.ParseExact(input, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); 
+0

Tôi đã viết câu trả lời chính xác này. –

+0

Mặc dù tôi sẽ thêm một số thông tin về cài đặt khu vực (toàn cầu hoá) ảnh hưởng đến phân tích cú pháp ngày. –

+0

@Vinko: Tôi cũng vậy. Đó là phần đau. ;) Không, nghiêm túc, nó là một khu vực khá phức tạp mà là một nguồn vấn đề chung. Tôi đã viết một loại câu trả lời lengty về chủ đề một thời gian trước đây ở đây: http://stackoverflow.com/questions/1437454/date-format-problem –

3

Có thể bạn đang sử dụng văn hóa sai. Tháng không thể là 26, do đó, nó không phải là dấu thời gian của Hoa Kỳ. Này hoạt động mặc dù:

using System; 
using System.Globalization; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     DateTime dateTime = DateTime.Parse("26/10/2009 8:47:39 AM", 
      CultureInfo.GetCultureInfo("en-GB")); 
    } 
} 
1

Tôi thứ hai @Lucero, Parse sử dụng thông tin văn hóa thread hiện hành, vv Xem thêm theo hướng ngược lại: một ToStringquestion trong bối cảnh này.

Các vấn đề liên quan