2012-02-10 37 views
5

Tôi cảm thấy như đây là điều tôi đã làm hàng nghìn lần nên không chắc tại sao nó lại khó khăn đến thế. Tôi đã tạo một phương thức đơn giản trả về ngày hôm nay cho người dùng dựa trên giá trị UTC của họ. Nhưng thay vì trả về một chuỗi giống như một ngày, nó sẽ trả lại rác nàyC# DateTime to String Issue

"䙭/䙭/Ἰ뻱䙭" 

Đây là mã.

public string getToday(Context context) 
{ 
    var settings = PreferenceManager.GetDefaultSharedPreferences(context); 
    var offset = settings.GetInt("offset", -5); 
    var now = DateTime.UtcNow.AddHours(offset); 

    return now.ToShortDateString(); 
} 

Khi tôi bước vào mã bằng cách sử dụng điểm ngắt, bù trừ và bây giờ cả hai đều có vẻ chính xác. bây giờ chứa các phần ngày hợp lệ tất cả dường như chính xác. Một cái gì đó về chuyển đổi bây giờ để một chuỗi có vẻ đi sai khủng khiếp. Đồng thời thử:

return now.ToString("MM/dd/yyyy"); 

Kết quả tương tự. Phần lạ là mã dưới đây trong một hoạt động khác hoạt động mà không có vấn đề

var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours; 
var now = DateTime.UtcNow.AddHours(offset); 
now.ToString("MM-dd-yyyy") 
+4

văn hóa là gì mã này chạy dưới? – Oded

+0

@Oded Tôi muốn nói không phải tiếng Anh! – Zenexer

+0

@Zenexer - Tôi muốn nói đó là một điều đã cho. Bình luận của tôi đã được nhiều hơn một con trỏ đến OP. – Oded

Trả lời

1

Tôi giả sử rằng thiết bị của bạn được đặt thành văn hóa Trung Quốc/Nhật Bản/Hàn Quốc. Nếu bạn luôn muốn quay trở lại ngày Mỹ, sử dụng:

return now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); 

Sửa: Với phần còn lại của bình luận của bạn, tôi bắt đầu nghi ngờ rằng điều này có thể được gây ra bởi tham nhũng, hoặc do một lỗi trong triển khai MonoDroid. Bạn có thể thử làm việc xung quanh nó bằng cách xây dựng ngày một cách thủ công (mặc dù điều này phải thừa nhận là không đề cập đến nguyên nhân về vấn đề của bạn):

return string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year); 
+0

Anh ấy nói các ứng dụng khác đã hoạt động, vì vậy nó nghe có vẻ đặc trưng cho ứng dụng - không phải máy cụ thể - với tôi. Trong trường hợp này, anh ta nên điều tra để xem nơi văn hóa được đặt không chính xác trong ứng dụng của mình, thay vì sửa chữa nó trên cơ sở từng trường hợp. – Zenexer

+0

Điều này không khắc phục được sự cố. Tôi chưa từng gặp vấn đề này trước đây và chưa bao giờ phải lo lắng về toàn cầu hoá. Mã trả về một DateTime hợp lệ nằm trong cùng một dự án. – jmease

+0

Bạn có chắc chắn rằng rác đang được trả về theo phương pháp của bạn và không được chuyển đổi sang mã đó bằng cách gọi phương thức của bạn (ví dụ: khi lưu vào tệp)? Có vẻ như biểu tượng đầu tiên của bạn, ‘䙭’, có nghĩa là “để nâng lên hoặc nâng cao (một chiếc váy, váy, v.v.)”; hầu như không liên quan đến ngày/giờ. – Douglas

3

Nghe giống như vấn đề địa phương hóa. Đảm bảo bạn thực sự bằng tiếng Anh, có thể là tiếng Hoa Kỳ hoặc tương tự.