为什么System.DateTime.Now在我的计算机上运行应用程序时工作但在我通过工作组启动应用程序时不起作用?

问题描述 投票:1回答:1

当应用程序在存储它的计算机上运行时加载时间,但是,当它在工作组上加载时,在另一台计算机上它不会加载时间(即使其他所有工作都应该如此)。

我已经为使用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]}";
    }
}

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

Expected result

这是我在工作组上的2台不同计算机上运行时得到的结果。

Actual result

c# datetime unity3d share workgroup
1个回答
2
投票

"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),它将节省一些内存分配创建阵列和中间串。

© www.soinside.com 2019 - 2024. All rights reserved.