Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查系统日期格式是否与mysql中存储的日期格式不同_C#_Mysql - Fatal编程技术网

C# 如何检查系统日期格式是否与mysql中存储的日期格式不同

C# 如何检查系统日期格式是否与mysql中存储的日期格式不同,c#,mysql,C#,Mysql,有时用户使用系统日期格式。如何检查系统日期是否更改,以及是否与存储的日期格式不同 我找到了一个解决办法,但在我看来不是很好。我通过sysdate.Substring(0,4)和DataDate.Substring(0,4)比较系统日期和数据日期的年份 但是用户可以将日期yyyy-dd-MM更改为其他格式 有没有更准确的方法 public static bool DateFormatChanged() { bool result=true; stri

有时用户使用系统日期格式。如何检查系统日期是否更改,以及是否与存储的日期格式不同

我找到了一个解决办法,但在我看来不是很好。我通过sysdate.Substring(0,4)和DataDate.Substring(0,4)比较系统日期和数据日期的年份

但是用户可以将日期yyyy-dd-MM更改为其他格式

有没有更准确的方法

    public static bool DateFormatChanged()
    {
        bool result=true;
        string Sys_date = DateTime.Now.ToString("d");
        string Data_date="";
        using (MySqlConnection conn = new MySqlConnection(PublicVariables.cs))
        {
            conn.Open();
            using (MySqlCommand cmd = new MySqlCommand("SELECT MAX(st_date) as d_date FROM stockdata", conn))
            {
                MySqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    Data_date = reader["d_date"].ToString();
                    if(Sysdate.Substring(0,4) != Data_date.Substring(0,4))
                        result =false;
                }
            }
        }
        return result;
    }
我认为最好的方法是一开始就设置系统格式,但我不知道怎么做


有人将日期时间更改为另一种格式,我在备份过程中没有注意到,结果如上所示。意外就在这天!当我使用前一天的备份并将格式设置为它的值时,除了丢失一天之外,一切都很好。

您的数据库将日期存储为日期,而不是字符串,不是吗

要检查当前的UI日期格式,可以使用

Dim cc = Threading.Thread.CurrentThread.CurrentUICulture
Dim dateFormat = cc.DateTimeFormat.ShortDatePattern
Console.WriteLine(dateFormat) ' outputs, e.g., dd/MM/yyyy

日期如何显示对您的程序来说并不重要:这取决于用户希望如何查看日期,您的程序应该尊重这一选择。

有一篇关于这一点的帖子。它基本上解释了如何比较2个日期字符串的格式,在您的例子中,这只是日期

讨论地点为:

正如约翰·斯基特(John Skeet)所说,“要以完全笼统的方式做到这一点是非常困难的”

下面是一段很长的路,但我认为将两个不同的日期(只要日期相同。对于不同的日期,您可以用特定字符替换数字以进行均衡,然后进行检查)与不同的格式进行比较是可行的

public static bool CompareDates(DateTime Date1, DateTime Date2)
{
    int Datetime1Format = 0;
    int Datetime2Format = 0;
    var Date1Formats = Date1.GetDateTimeFormats();
    var Date2Formats = Date2.GetDateTimeFormats();
    for (int i = 0; i < Date1Formats.Length; i++)
    {
        if (Date1Formats[i] == Date1.ToString())
            Datetime1Format = i;
    }
    for (int k = 0; k < Date2Formats.Length; k++)
    {
        if (Date2Formats[k] == Date2.ToString())
            Datetime2Format = k;
    }

    if (Datetime1Format == Datetime2Format)
        return true;
    else
        return false;

}

它的基本功能是,获取日期,用空字符串替换数字,因为日期不同,然后比较其余的日期。这可能对某些格式不起作用,例如(2014年12月14日vs 2014年12月14日),但如果日期的实际布局不同,则应该给您一个想法。

如果您使用
子字符串
检查日期,它不是日期,而是字符串。日期没有格式,可以以各种格式显示……如果数据库中将
st_date
定义为string/char,则
MAX
将执行文本比较,并给出各种值的错误结果。st_date是日期格式。我并没有找到一个准确的解决方案,检查月。当然,基础是数据。系统日期必须与数据中的日期一致。默认情况下,我存储yyyy-MM-dd格式。日期没有格式(它们只是一个值),因此,如果您设置的是“yyyy-MM-dd”等特定格式,则它不能是日期列。正如您在我的方法中所看到的,我从数据中获取最后一个(最大)日期,并查看系统数据是否与数据中的相同,否则有人更改了它。我不想检查所有的日期格式。当程序第一次午餐时,写入适合cultureinfo的数据。首先,我不确定为什么这是必要的,可能是为了格式化,但您可以始终以默认概念向用户提供格式化。如果您想检查区域性信息,并且日期不同(我假设您选择了系统日期),那么正如我在回答中所指出的,将每个数字替换为一个字符,然后检查它们是否相等。e、 g(XXXX-XX-XX XX:XX vs XXXX/XX/XX XX:XX)我有一种方法,在年底只备份库存的产品和材料,然后我将这些数据以cvs格式保存在我的计算机中(或者在我的程序中进行备份)。如果在备份或还原之间更改了日期格式,则所有日期在还原后都会被放大。这就是我需要这张支票的原因。我在c#var cc=Thread.CurrentThread.CurrentUICulture中更改了您的建议;var dateFormat=cc.DateTimeFormat.ShortDatePattern;但是它给了我M/d/yyyy我的日期格式是如何被用户定义的以及yyyy-MM-dd??可能是什么错误?有几种可能性,也许您需要检查
DateTimeFormat.LongDatePattern
。哦,由于您没有对我的答案的第一行进行评论,错误似乎是您将日期存储为字符串而不是日期。我没有检查数据库日期的格式。我不知道该怎么做。我检查的只是系统日期的格式,并与数据中的日期进行比较。为什么我需要这个设施?因为在12个表单的每个部分都有一个子文件夹string=DateTime.Now.ToString(“d”);我必须用string SubFolder=DateTime.Now.ToString(“yyyy-MM-dd”);这很烦人。@IsmailGunes 1)看起来你找到了正确的方法。2) 日期没有格式,只有日期的表示形式有格式。是的,没错。当我在客户端计算机中更改格式并使用与服务器不同的格式输入date addwithvalue时,在读取过程中会出现错误。当我看phpmyadmin时,我看到日期是0000-00-00或类似的东西。因此,这迫使我使用Convert.ToDateTime(…)输入所有日期。我将在任何地方添加此转换函数,或者在程序开始时检查日期格式
            var Comp1 = Regex.Replace(Date1.ToString(), @"[\d-]", string.Empty);
            var Comp2 = Regex.Replace(Date2.ToString(), @"[\d-]", string.Empty);

            if (Comp1 == Comp2)
                return true;
            else
                return false;