C#DateTime to String Issue

jme*_*ase 5 c# android xamarin.android

我觉得这是我做过一千次的事情,所以不确定为什么现在这么困难.我创建了一个方法,根据用户的UTC偏移量简单地返回用户的今天日期.但是它不是返回类似日期的字符串,而是返回这个垃圾

"?/??/????"
Run Code Online (Sandbox Code Playgroud)

这是代码.

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();
}
Run Code Online (Sandbox Code Playgroud)

当我使用断点进入代码时,偏移现在看起来都是正确的.现在包含所有看似准确的有效日期部分.关于将现在转换为字符串的事情似乎非常错误.还尝试过:

return now.ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)

结果相同.奇怪的部分是下面的代码在另一个活动工作没有问题

var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
var now = DateTime.UtcNow.AddHours(offset);
now.ToString("MM-dd-yyyy")
Run Code Online (Sandbox Code Playgroud)

Dou*_*las 1

我假设您的设备设置为中文/日文/韩文文化。如果您总是想返回美国日期,请使用:

\n\n
return now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);\n
Run Code Online (Sandbox Code Playgroud)\n\n

编辑:鉴于您的其余评论,我\xe2\x80\x99m 开始怀疑这可能是由损坏或 MonoDroid 实现中的错误引起的。您可以尝试通过手动构造日期来解决这个问题(尽管这确实不能解决问题的原因):

\n\n
return string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year);\n
Run Code Online (Sandbox Code Playgroud)\n