在单则DateTime.ToString返回无效日期(“00/734718/0001 1点41分38

2019-06-26 18:02发布

我试图让单(Debian的2.10.8.1-5)在我与raspbian发行(“的Debian GNU / Linux的喘息/ SID”)树莓派正常运行。 我已经安装了单用apt-get安装单完成。

但是,我遇到了,我想不出一个有趣的问题。 的则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直到今天天数。 我有一个新的安装tryed它在第二板,但具有相同的问题。

有没有人有一个想法是什么这里的问题是,如何说服则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上,结果是“楼(1.5):1”,而在对树莓派我单设置是“地板(1.5):0”。 我已经看到System.Math.Floor作为实施

[MethodImplAttribute (MethodImplOptions.InternalCall)]
public extern static double Floor (double d);

明天,我将进一步研究这个问题。 没有人知道为什么这个问题会存在吗?

Answer 1:

这是单声道的bug #7938 ,它不仅影响则DateTime.ToString,但是,直接或间接地通过一个浮点数到库调用,用一个Linux发行版为硬浮建立在ARM上运行时的任何功能ABI。 更多详情,可在C#树莓派的 wiki页面。 目前还没有很好的修复了这一点,短期运行的软浮发行的。 我仍然希望我们能够很快得到一个固定的单声道运行。



Answer 2:

我无法重现您的问题在Windows(没有草莓,而是你的主题说Mono )。

我复制并粘贴您的确切来源Main()到一个新的单控制台应用程序(单声道2.6.1),添加一行( Console.ReadLine(); ),并运行它:

using System;

namespace TestDateTimeNow
{

  class MainClass
  {
    public 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"));
        Console.ReadLine();
    }
  }
}

我得到以下的输出:



Answer 3:

这是最有可能是ARM单二进制层的bug。 特别是因为你正在运行的版本是树莓派之前释放。 你将有上更好的运气单-devel邮件列表 。 而且它的可能,这已经是固定的饭桶。



Answer 4:

您需要使用软浮点OS这一点。 2013-05-29-wheezy-armel.zip例如。

硬浮点不JITers很好地工作。 我有同样的问题,通过对我的RP安装操作系统的软浮点版本解决它。 使用.NET与树莓派平台下的硬浮点OS但我不推荐。 希望这可以帮助。



文章来源: DateTime.ToString in Mono return invalid date (“00/734718/0001 01:41:38”)