如何使用 c# 在没有 am/pm 指示符的情况下获取当前系统日期和时间

本文关键字:获取 情况下 系统 时间 日期 指示符 何使用 pm am | 更新日期: 2023-09-27 18:35:24

我将系统区域设置为"西班牙语",所以我得到的时间格式如下:20/02/2016 02:39:40 a.m. ;I已将此值存储在日期时间变量中并传递给 SQL 数据库表。我在插入日期时间可变时将数据库默认语言也设置为"西班牙语"。获取异常

从字符转换日期和/或时间时转换失败 字符串

由于有"."(预报)在上午/下午我得到了这个例外。我在这个问题上搜索了很多,每次都将日期时间变量转换为字符串格式。但我应该仅将其作为日期时间变量传递。

因此,请让我知道如何在没有am/pm或没有" ." in am/pm 的情况下获取当前系统日期时间

 //Here is my code:
    DomainSchema.DOMAINRow drDomain = domain_dataset.DOMAIN.NewDOMAINRow();
    //Assigning the values to the DataRow of the table Domain
       drDomain.CREATED_DATE = DateTime.Now;
       drDomain.LAST_UPDT_DATE = DateTime.Now;
       domain_dataset.DOMAIN.AddDOMAINRow(drDomain);
     CultureInfo i;                
  i = (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
                if (i.Name == "es-PE")
                {
                   CultureInfo c = CultureInfo.CreateSpecificCulture("es-ES");
         String s = DateTime.Now.ToString(c); //getting s="20/02/2016 08:07:54"
   DateTime d = DateTime.Parse(s, c, System.Globalization.DateTimeStyles.AssumeLocal); //geting d="20/02/2016 08:07:54 a.m."
}
    //method that uses this dataset
    public override string Create(DataSet ds, string tableName, IDbTransaction transaction, IPrincipal user)
            {
                DataRow dRow = null;
                CommandStatement cmdStatemnt;
                string strResult = string.Empty;
                try
                {
                  dRow = ds.Tables[tableName].Rows[0];
            cmdStatemnt = Execute(dRow, tableName, transaction, true, null, user); 
                   //Here I'm getting exception,conversion failed when converting date and/or time from character string,due to having "." in "a.m." 
                }
        }

提前谢谢。

如何使用 c# 在没有 am/pm 指示符的情况下获取当前系统日期和时间

将日期/时间传递给数据库时,我总是使用它

Datetime d = DateTime.Today;
String s = d.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
// output   "02/20/2016 12:00:00 AM"
String s = d.ToString("MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
// output   "02/20/2016 00:00:00"

使用大写字母 HH 提供 24 小时格式


在这里,您可以找到有关日期时间格式的更多信息

  • https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

根据评论进行更新

在所描述的情况下,您应该能够做这样的事情。

CultureInfo c = CultureInfo.CreateSpecificCulture("es-ES");
String s = DateTime.Now.ToString(c);
DateTime d = DateTime.Parse(s, c, System.Globalization.DateTimeStyles.AssumeLocal);

基于评论的第二次更新

另外 2 种方式可能是:

  • 在运行数据库事务时切换区域性

    // Switch Current Culture
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    // run database code
    // Switch Back To Origin Current Culture
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES");
    
  • 更改数据集对象并将CREATED_DATE键入为字符串而不是日期时间

    毕竟,当您执行 SQL 查询时,日期时间在查询中被视为字符串(带引号),即使它们存储的字段是日期时间类型。

你是如何得到这个日期时间值的?你这样做是这样的: var dt = Datetime.Now;

您可以使用DateTime.Now.ToString("your formate"),因此您的时间变为字符串类型,最后,您可以插入到数据库中,该数据库使用SQL函数将此字符串转换为日期类型。