I am trying to get mono (Debian 2.10.8.1-5) to run properly on my raspberry pi with the raspbian distro ("Debian GNU/Linux wheezy/sid"). I have installed mono with apt-get install mono-complete.
However, I am running into an interesting issue that I cannot figure out. The DateTime.ToString() method returns an invalid string.
Below you can find my sample program with the console output:
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"));
}
}
}
Output:
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
Interestingly enough, 734718 seems to be the the number of days elapsed till today since 01/01/0001. I have tryed it with a fresh installation on a second board but with the same issue.
Does anyone have an idea what the problem here is and how to convince DateTime.ToString() to return the right value?
Update (8/4/2012): After long digging through the mono source code I was able to trace the issue back to System.Math.Floor. Apparently, it always returns 0. I changed my test program to a simple:
static void Main(string[] args)
{
Console.WriteLine("Floor(1.5): " + System.Math.Floor(1.5));
}
On Windows the result is "Floor(1.5): 1" Whereas on my mono setup on the raspberry pi is "Floor(1.5): 0". I have seen that System.Math.Floor is implemented as
[MethodImplAttribute (MethodImplOptions.InternalCall)]
public extern static double Floor (double d);
Tomorrow, I will look further into this issue. Does anyone know why this issue could exist?