我正在尝试使用 raspbian 发行版(“Debian GNU/Linux wheezy/sid”)让 mono(Debian 2.10.8.1-5)在我的树莓派上正常运行。我已经使用 apt-get install mono-complete 安装了单声道。
但是,我遇到了一个我无法弄清楚的有趣问题。DateTime.ToString() 方法返回无效字符串。
您可以在下面找到我的带有控制台输出的示例程序:
using System;
namespace MonoTest
{
class Program
{
static void Main(string[] args)
{
DateTime now = DateTime.Now;
Console.WriteLine("Year: " + now.Year);
Console.WriteLine("Month: " + now.Month);
Console.WriteLine("Day: " + now.Day);
Console.WriteLine("DayOfWeek: " + now.DayOfWeek);
Console.WriteLine("DateTime.Now: " + DateTime.Now);
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd"));
}
}
}
输出:
pi@raspberrypi ~/bin $ mono MonoTest.exe
Year: 2012
Month: 8
Day: 3
DayOfWeek: Friday
DateTime.Now: 00/734718/0001 01:41:38
0001-00-734718
有趣的是,734718 似乎是自 01/01/0001 到今天为止的天数。我已经在第二块板上进行了全新安装,但遇到了同样的问题。
有谁知道这里的问题是什么以及如何说服 DateTime.ToString() 返回正确的值?
更新(2012 年 8 月 4 日):在对单声道源代码进行长时间挖掘之后,我能够将问题追溯到 System.Math.Floor。显然,它总是返回 0。我将测试程序更改为简单的:
static void Main(string[] args)
{
Console.WriteLine("Floor(1.5): " + System.Math.Floor(1.5));
}
在 Windows 上,结果是“Floor(1.5): 1”,而我在树莓派上的单声道设置是“Floor(1.5):0”。我已经看到 System.Math.Floor 被实现为
[MethodImplAttribute (MethodImplOptions.InternalCall)]
public extern static double Floor (double d);
明天,我将进一步研究这个问题。有谁知道为什么会存在这个问题?