如何在int中存储转换日期时间?

时间:2014-01-11 13:10:01

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

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

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

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

但显示错误:

  

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

错误在哪里?

4 个答案:

答案 0 :(得分:7)

只需使用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时代以来的几秒钟。

答案 1 :(得分:0)

您可以存储特定时间点(您定义的)的毫秒数,也可以使用yyyyMMddhhmmss等格式(如果您想要更高精度,则使用fff)。

答案 2 :(得分:0)

原始问题是错误在哪里?

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的显示值括在引号中,以便可以轻松检测空格,换行符和其他意外字符的存在与否。

答案 3 :(得分:-2)

// 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());
    }
}