Я пытаюсь заставить моно (Debian 2.10.8.1 -5 )правильно работать на моем raspberry pi с дистрибутивом raspbian («Debian GNU/Linux wheezy/sid» ). Я установил моно с помощью apt -, чтобы завершить установку моно -.
Однако я столкнулся с интересной проблемой, которую не могу понять. Метод 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 ()вернуть правильное значение?
Обновление (04.08.2012):После долгих копаний в исходном коде моно я смог отследить проблему до System.Math.Floor. Судя по всему, он всегда возвращает 0. Я изменил свою тестовую программу на простую:
static void Main(string[] args)
{
Console.WriteLine("Floor(1.5): " + System.Math.Floor(1.5));
}
В Windows результат «Этаж (1,5 ):1», тогда как в моей моноустановке на Raspberry Pi это «Этаж (1,5 ):0». Я видел, что System.Math.Floor реализован как
[MethodImplAttribute (MethodImplOptions.InternalCall)]
public extern static double Floor (double d);
Завтра буду дальше разбираться в этом вопросе. Кто-нибудь знает, почему эта проблема может существовать?