【问题标题】:DateTime.Now value differs based on Android devicesDateTime.Now 值因 Android 设备而异
【发布时间】:2015-09-15 10:05:56
【问题描述】:

我正在开发一个 Xamarin Android 项目。在我的项目中 DateTime.Now 方法返回值根据 Android 操作系统不同

对于 Android OS = 4.0.4 以下是 DateTime.Now 的值

DateTime.Now {15/09/2015 14:41:26}

对于 Android OS > 4.0.4 以下是 DateTime.Now 的值

DateTime.Now {9/15/2015 2:41:26 PM}

这会导致问题,因为下面是我的验证

Convert.ToDateTime("9/16/2017 12:16:00 PM") > DateTime.Now)

我对这个问题感到困惑。验证仅适用于 Android OS > 4.0.4。任何帮助都将不胜感激!

我的尝试: 1.尝试将DateTime转换如下

DateTime.Now.ToString("M/dd/yyyy hh:mm:ss tt")

但是,它的返回值为“”9/16/2015 12:16:00 pm“”。它不能帮助我解决问题

【问题讨论】:

    标签: c# android datetime xamarin


    【解决方案1】:

    应该是设备默认Locale不同造成的。

    以下内容应独立于默认区域设置

    System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US");
    Convert.ToDateTime("9/16/2017 12:16:00 PM", enUS);
    

    【讨论】:

    • 太棒了..你节省了我的时间!!
    【解决方案2】:

    使用此代码,

    public static DateTime? ToNullableDateTime(string dateTime)
    {
        if (string.IsNullOrEmpty(dateTime))
            return (DateTime?)null;
    
        var ci = CultureInfo.InvariantCulture;
        var formats = new[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "M-d-yyyy", "dd-MM-yyyy", "dd/MM/yyyy", "dd/MM/yyyy HH:mm:ss", "MM-dd-yyyy", "M.d.yyyy", "dd.MM.yyyy", "MM.dd.yyyy" }
                .Union(ci.DateTimeFormat.GetAllDateTimePatterns()).ToArray();
        var dt = DateTime.ParseExact(dateTime, formats, ci, DateTimeStyles.None);
    
        return dt;
    }
    

    然后转换成你想要的格式,

    var stringDate = myDateTime.ToString("dd/MM/yyyy HH:mm:ss");
    

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2018-10-28
      • 2016-09-14
      • 1970-01-01
      • 2018-09-02
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多