【问题标题】:Why does System.DateTime.Now work when the application is ran on my computer but does not work when i start the application over workgroup?为什么当应用程序在我的计算机上运行时 System.DateTime.Now 工作,但当我通过工作组启动应用程序时不工作?
【发布时间】:2019-04-22 21:04:37
【问题描述】:

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

我为使用 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 台不同的计算机上运行它时得到的结果。

【问题讨论】:

  • 您确定在这两个地方执行完全相同的代码吗?我问是因为您拥有的格式字符串包含句点和数组引用。由于您没有对 split 代码的结果进行任何检查,因此如果数组的长度小于 3,则此代码应引发异常。
  • Protip:从不对日期格式做出假设!
  • 感谢您的帮助,一旦我以原始形式打印它,我看到它以不同的格式返回日期和时间(在我的 PC 上是月/日/年等等,另外两个是day.month.year)
  • 我编辑了您指向代码图像的链接。请不要以图像格式发布代码,始终将代码直接发布在问题本身中(我意识到您发布了一些代码,我只是将图像中的内容移到帖子中,我将此评论添加为尝试提供帮助)
  • 当您将格式字符串 dDateTime 对象一起使用时,它的格式取决于文化。您可以查看DateTime.ToString 的文档,以查看一个很好的差异示例。

标签: c# datetime unity3d share workgroup


【解决方案1】:

"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),它会为您节省一些内存分配创建数组和中间字符串。

【讨论】:

  • 谢谢,这解决了我遇到的问题
猜你喜欢
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
相关资源
最近更新 更多