gpt4 book ai didi

c# - 为什么 Convert.ToDateTime() 在此示例中不起作用?

转载 作者:太空狗 更新时间:2023-10-30 00:10:08 25 4
gpt4 key购买 nike

我正在尝试同时使用 System.DateTime.Now.ToString() 和 Convert.ToDateTime,但遇到了一些奇怪的行为。我已将问题缩小到 Convert.ToDateTime。由于某种原因,使用 System.DateTime.Now 设置的 DateTime 类型与从字符串转换而来的类型不同。但是,当您输出它们中的任何一个时,它们看起来是相同的。

(我试过使用 Trim()、TrimStart() 和 TrimEnd() 都无济于事。)

这是统一运行后控制台中的输出:<强> http://imgur.com/1ZIdPH4

using UnityEngine;
using System;

public class DateTimeTest : MonoBehaviour {
void Start () {
//Save current time as a DateTime type
DateTime saveTime = System.DateTime.Now;
//Save above DateTime as a string
string store = saveTime.ToString();
//Convert it back to a DateTime type
DateTime convertedTime = Convert.ToDateTime(store);

//Output both DateTimes
Debug.Log(saveTime + "\n" + convertedTime);

//Output whether or not they match.
if (saveTime == convertedTime)
Debug.Log("Match: Yes");
else
Debug.Log("Match: No");

//Output both DateTimes converted to binary.
Debug.Log(saveTime.ToBinary() + "\n" + (convertedTime.ToBinary()));
}
}

最佳答案

当您通过 DateTime.ToString()DateTime 转换为字符串时,您会损失很多。

即使你像这样包含毫秒:

DateTime convertedTime =
new DateTime(
saveTime.Year,
saveTime.Month,
saveTime.Day,
saveTime.Hour,
saveTime.Minute,
saveTime.Second,
saveTime.Millisecond);

您仍然会得到一个与原始时间不相同的不同 DateTime

这样做的原因是 DateTime 在内部存储了一些滴答声(从 0001 年 1 月 1 日午夜 12:00:00 开始)。每个刻度代表一秒的百万分之一。要使两个 DateTime 对象相等,您需要获得相同数量的 Ticks。

因此,要获得相等的 DateTime,您需要这样做:

DateTime convertedTime = new DateTime(saveTime.Ticks);

或者,如果您想将其转换为字符串(以存储它),您可以像这样将报价存储为字符串:

string store = saveTime.Ticks.ToString();

DateTime convertedTime = new DateTime(Convert.ToInt64(store));

关于c# - 为什么 Convert.ToDateTime() 在此示例中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com