我需要在Int中存储DateTime。所以我尝试了下面的代码
Int64 n = Int64.Parse(DateTime.Today.ToString("dd-MM-yyyy"));
或
Int64 twoday_date=Convert.ToInt64(System.DateTime.Today.ToString("dd-MM-yyyy"));
但显示错误:
输入字符串的格式不正确。
错误在哪里?
答案 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
中的值。请注意,WriteLine
将s
的显示值括在引号中,以便可以轻松检测空格,换行符和其他意外字符的存在与否。
答案 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());
}
}