首页 > 解决方案 > 为什么当应用程序在我的计算机上运行时 System.DateTime.Now 工作,但当我通过工作组启动应用程序时不工作?

问题描述

当应用程序在存储它的计算机上运行时,它会加载时间,但是,当它通过工作组加载时,在另一台计算机上它不会加载时间(即使其他一切正常工作)。

我已经为使用 Unity 和 C# 的 Windows 制作了一个应用程序,它需要能够从系统加载今天的日期,并且当应用程序在存储它的计算机上运行时它可以工作(该应用程序不需要安装),但是,当我尝试从另一台计算机通过工作组运行它时,它不会加载时间。我已经测试了应用程序中的所有其他内容,唯一似乎出现故障的函数是 DateTime.Now 函数。我还尝试用 DateTime.Today、System.DateTime.Now 和其他一些变体替换它,但都没有成功。

public class TestTodayDate : MonoBehaviour
{
    public Text text;

    void Start()
    {
        DateTime today = DateTime.Now;
        string[] day = today.ToString("d").Split('/');
        text.text = $"{day[1]}.{day[0]}.{day[2]}";
    }
}

这是预期的结果,也是我在本地运行应用程序时得到的结果。

预期结果

这是我通过工作组在 2 台不同的计算机上使用它时得到的结果。

实际结果

标签: c#datetimeunity3dshareworkgroup

解决方案


"d"格式字符串使用系统级配置的短日期字符串格式。个人可以在他们认为合适的时候在他们的系统上更改这种格式。因此,如果您需要依靠某种方式查看结果,则不应使用"d"格式字符串。

相反,您可能很想这样做:

void Start()
{
    DateTime today = DateTime.Now;
    string[] day = today.ToString("dd/MM/yyyy").Split('/');
    text.text = $"{day[1]}.{day[0]}.{day[2]}";
}

但这也不完全正确。在 .Net 日期格式字符串中,该/字符具有特殊含义,它代替了系统日期分隔符。同样,根据操作系统中存在的文化或自定义设置,此值可能与您所期望的不同。

你真正应该做的是:

void Start()
{
    text.text = DateTime.Now.ToString("d.M.yyyy");
}

这将始终提供预期值(尽管我不得不猜测日期格式,无论您是否希望0在月初看到领先),并且它将为您节省一些创建数组和中间字符串的内存分配.


推荐阅读