日期时间转换不起作用c#

时间:2016-03-22 04:27:49

标签: c# datetime

编辑我已完全编辑了代码,因为我修复基本错误的许多奇怪尝试都误导人们相信我的代码中存在错误,当它只是尝试任何和所有适用于解决问题。我尝试将完全有效的BUILT IN日期时间格式转换为系统日期时间对象的许多方法都失败了,并且不知道原因。

EndEdit中

我需要帮助,由于无法解决这样一个看似简单的任务,试图将我的日期日志(正确读取的csv)转换为DateTime,我实际上只是撕掉了一些头发。错误在于尝试将我的日志条目(打印时,正确格式化日期时间)转换为DateTime对象进行比较。

EXAMPLE INPUT FROM CSV: 2016-03-22T04:03:31
EXAMPLE INPUT FROM File.GetLastWriteUTC(path): 2016-03-22T04:03:27

两者都相同,但由于没有特殊原因,我无法将我的csv日志条目转换为DateTime

我尝试过任意数量的格式。我正在写控制台,证明我正在使用的日期确实是正确的C#兼容日期时间格式。我已经尝试了DateTime.Parse / ParseExact以及我可以在网上找到的每个参数。我甚至试图将新的日期时间重新映射到新格式,或者将字符串转换为日期时间,返回到具有格式的字符串,并将该正确格式化的字符串转换回日期时间。

然而,每次运行我的程序时,我都会留下“当将字符串转换为DateTime时,解析字符串以在将每个变量放入DateTime对象之前获取日期。”并且“确保你的论点采用相同的格式”,尽管我已经证明它们超出了怀疑的正确格式,没有遗漏零,也没有单引号。我正在使用.ToString修饰符编写内置格式,我已经在列表中尝试f,F o,O,s,S等。

有人请保佑我的理智。下面你可以看到我的一些脑子炒黑客的尝试,弄清楚为什么这不起作用,只是当我认为我想出了一些聪明的东西,保证正确的格式,它仍然失败。

        using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace vimbackupscript2
{
    class Program
    {
        static void Main()
        {
            while (true)
            {
                FileSystemWatcher watcher = new FileSystemWatcher();
                watcher.Path = "C:\\Program Files\\Git\\etc";
                watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.LastWrite;
                DateTime time = File.GetLastWriteTimeUtc(watcher.Path + "\\vimrc");
                string logPath = "C:\\Users\\USERPROFILE\\vimbackup\\log.csv";
                var logFile = File.ReadAllText(logPath).Split(',');

                foreach (var log in logFile)
                {
                    Console.WriteLine(Convert.ToDateTime(log));

                }

                watcher.Changed += new FileSystemEventHandler(OnChanged);

                watcher.WaitForChanged(WatcherChangeTypes.All);

                File.WriteAllText(logPath, time.ToString("s") + ",");
            }

        }


    }

}

2 个答案:

答案 0 :(得分:0)

您可以使用DateTime.ParseExact("2016-03-22T04:03:31", "yyyy'-'MM'-'dd'T'HH':'mm':'ss")在任何区域性设置中获取正确的DateTime。

您的代码中还有其他问题。您认为通过转换为datetime,然后转换为字符串然后转换为datetime,您会得到什么?

如果只是比较失败,那么很明显日期时间转换就可以了,因为你到目前为止。

您正在 UTC 中使用DateTime,然后根据 local 时间创建另一个DateTime,因此它将根据时区偏移量关闭。然后你做ToString()什么都不做。

你的实际问题是,你把DateTime搞砸了时区吗?调试器将很容易显示时间。

如果您想比较当地时区的日期时间,请使用GetLastWriteTime来获取时间。

答案 1 :(得分:0)

问题在于您是否调试代码并检查滴答数。 最好的解决方案是在foreach循环中创建DateTime类型然后进行比较。我,e <div class="input-group"><input type="text" data-options="{&quot;mode&quot;:&quot;calbox&quot;, &quot;useInline&quot;:false, &quot;useInlineAlign&quot;: &quot;right&quot;}" data-role="datebox" id="in1" class="form-control" readonly="readonly"><div class="input-group-addon" title="Open Date Picker"><span class=" glyphicon glyphicon-calendar"></span></div></div> 。我也发布了我的测试代码

enter image description here

var result = new DateTime(...)