【问题标题】:How to store convert date time in int?如何将转换日期时间存储在 int 中?
【发布时间】:2014-01-30 12:09:35
【问题描述】:

我需要将 DateTime 存储在 int 中。所以我尝试了下面的代码

Int64 n = Int64.Parse(DateTime.Today.ToString("dd-MM-yyyy"));

Int64 twoday_date=Convert.ToInt64(System.DateTime.Today.ToString("dd-MM-yyyy"));

但显示错误:

输入字符串的格式不正确。

哪里出错了?

【问题讨论】:

  • 您可以使用TimeStamp
  • 嗯,是的,“2014-01-14”不能被解析为 long - 你希望它有什么值?
  • 我需要将当前日期与 datetimepicker 进行比较

标签: c# .net winforms datetime type-conversion


【解决方案1】:

只需使用 DateTime.Ticks 代替 - 绝对没有理由在此处开始与字符串相互转换。

long ticks = DateTime.Today.Ticks;

// Later in the code when you need a DateTime again
DateTime dateTime = new DateTime(ticks);

请注意,这将使用 本地 日期 - 如果您尝试保留全局时间戳,则应使用 DateTime.UtcNow 而不是 DateTime.Today

如果你真的需要int 而不是long,你可能应该翻译和缩放,例如自 Unix 纪元以来的秒数。

【讨论】:

  • 如何与日期时间选择器进行比较 "int p_date = int.Parse(datetime_from.ToString());"
  • @Happy:我什至不会尝试。首先不要尝试将日期/时间的字符串表示解析为整数。
【解决方案2】:

您可以存储某个时间点(您定义的)的毫秒数,也可以使用诸如 yyyyMMddhhmmss 之类的格式(如果您想要更精确,还可以使用 fff)。

【讨论】:

    【解决方案3】:

    最初的问题是问错误在哪里?在:

    Int64 n = Int64.Parse(DateTime.Today.ToString("dd-MM-yyyy"));
    

    ToString(...) 方法生成日期时间值的字符串表示形式。在这种情况下,它的参数字符串"dd-MM-yyyy" 给出了要生成的字符串的格式。所以今天这将生成字符串"11-01-2014"Int64.Parse(...) 尝试将其参数字符串解析为整数,但这里它混合了数字和连字符。因此它会引发异常。

    理解这类问题可能很棘手。一种技巧是将陈述分解成更小的部分并依次理解它们。当问题解决后,如果需要,可以将更正的部分组合成一个语句。在这种情况下,语句可以拆分为:

    string s = DateTime.Today.ToString("dd-MM-yyyy");
    Console.WriteLine("The date string is '{0}'", s);
    Int64 n = Int64.Parse(s);
    

    然后使用调试器或显示的WriteLine 显示s 中的值。请注意,WriteLines 的显示值括在引号中,以便可以轻松检测是否存在空格、换行符和其他意外字符。

    【讨论】:

      【解决方案4】:
      // the local utc offset is  +2:00
       public class Program
      {
          public static void Main(string[] args)
          {
             // code executed in timezone GMT+2:00
              long ticksUtc = DateTime.UtcNow.Ticks;
      
              Console.WriteLine("{0:d}",ticksUtc);
              DateTime _todayUtc = new DateTime(ticksUtc);
               Console.WriteLine("{0}",_todayUtc);
              // get local date time from Utc time
               Console.WriteLine("{0}",_todayUtc.ToLocalTime());
              Console.WriteLine();
              long ticksLocal = DateTime.Now.Ticks;
              Console.WriteLine("{0:d}",ticksLocal);
              Console.WriteLine("{0:d}",ticksLocal-ticksUtc);
             DateTime _todayLocal = new DateTime(ticksLocal);
               Console.WriteLine("{0}",_todayLocal);
      
              // get the utc time from _todaylocal time
              Console.WriteLine("{0}",_todayLocal.ToUniversalTime());
          }
      }
      

      【讨论】:

      • 这个答案并没有为 2014 年的答案添加任何有用的东西。您能否编辑您的答案以添加您认为它有用的原因?
      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2016-12-19
      • 2021-04-10
      相关资源
      最近更新 更多