Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 日期小于等于12时的日期时间问题_C#_Datetime - Fatal编程技术网

C# 日期小于等于12时的日期时间问题

C# 日期小于等于12时的日期时间问题,c#,datetime,C#,Datetime,我环顾了很多地方,没有编写一段可怕的代码来操作字符串,我想问一下,是否有人知道一种很好的排序方法: 我在单元格中提取了一组日期字符串,例如: 2011年5月3日 27/05/2011 31/05/2011 03/05/2011 09/05/2011 31/05/2011 等等 当我阅读任何一个可以把一天理解为一个月的实体时,也就是上面的条目1、4和5,它被作为一个日期时间输入,日期和月份被交换 例如,2011年5月3日被读入为日期时间2011年3月5日00:00:00 其他的都读过了,很好地为我

我环顾了很多地方,没有编写一段可怕的代码来操作字符串,我想问一下,是否有人知道一种很好的排序方法:

我在单元格中提取了一组日期字符串,例如:

2011年5月3日 27/05/2011 31/05/2011 03/05/2011 09/05/2011 31/05/2011 等等

当我阅读任何一个可以把一天理解为一个月的实体时,也就是上面的条目1、4和5,它被作为一个日期时间输入,日期和月份被交换

例如,2011年5月3日被读入为日期时间2011年3月5日00:00:00 其他的都读过了,很好地为我提供了一个简单的字符串27/05/2011

我从Excel中获取此信息,使用

((Excel.Range)worksheet.Cells[rowCount, 3]).Value.ToString()
如果我像在其他行中一样尝试Value2,它会将这些奇数日期读取为40607之类的内容,但同样会正常读取其他日期。

如果使用函数将字符串转换为DateTime对象,您可以指定日期使用的特定格式,该格式看起来像日/月/年,而无需进行任何字符串操作

例如:

var dateString = "03/05/2011";

var format = "dd/MM/yyyy";

var date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
可以找到有关自定义日期和时间格式字符串的更多信息

编辑:尝试使用该方法将属性返回的值转换为DateTime对象,例如:

var dateTime = DateTime.FromOADate(((Excel.Range)worksheet.Cells[rowCount, 3]).Value2);

问题是你的约会被解读为美国文化或类似文化

如果使用以下选项,则可以指定日期的预期格式:使用

DateTime result;
if(DateTime.TryParseExact("dd/MM/yyyy", out result))
{
   // Got an English date
 }
使用指定的格式和区域性特定的格式信息,将日期和时间的指定字符串表示形式转换为其等效的日期时间

字符串表示形式的格式必须与指定的格式完全匹配

String dateString = "15/06/2008";
String format = "dd/MM/yyyy";

DateTime result = 
   DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);

这听起来像是一个本地化问题。尝试隐式设置您的区域设置。例如,在WPF应用程序中,它类似于:

System.Threading.Thread.CurrentThread.CurrentCulture = 
    new System.Globalization.CultureInfo("en-US");
我在单元格中提取了一组日期字符串,例如:

不,你没有。您可以混合使用看起来像日期的字符串和看起来像字符串的日期。这是Excel问题,不是C问题

不确定您是在创建电子表格,还是从其他地方获取。但问题是Excel试图在输入单元格时解析文本。在这种情况下,它对找到的日期做出了一些错误的决定

如果输入2011年5月3日这样的日期,Excel将错误地将其解析为2011年3月5日,并将其存储为数字日期代码40607。然后,它将日期格式应用于在我的计算机上使用m/d/yyyy的单元格

如果输入2011年5月31日这样的日期,Excel无法将其解析为日期,而是将其存储为文本

要证明这一点,请选择单元格并转到编辑>清除>格式。所有不好的日期都会以数字的形式显示,其余的日期看起来都像日期

您有几个选择:

在将数据输入Excel之前,请先修复数据,并在所有数据前添加一个“以便将其全部输入为文本”,或者确保在具有正确日期设置的计算机上创建电子表格。 不要使用Excel中的.Value.ToString,只使用.Text。这将忽略Excel所做的错误解析,并且应该为您提供两种类型的一致文本值,您可以根据其他答案使用C进行精确解析。
2要容易得多,如果电子表格已经存在,可能是您唯一的选择。

您使用的文化/地区是什么?@Skurmedel:en GB我对日期的要求,如2011年5月27日,应该会给出,但这似乎不是一个本地化问题。当只阅读那些日期时,它会有一种奇怪的行为,在这些日期中,它可能会对日期和月份的方向产生歧义。所有其他实体都读得很好。我试过这样的东西。我的问题似乎是,在读取单元格中的值时,它会在我要求之前以错误的格式将其作为日期时间读取。但是,为什么它不将其余条目读取为DateTimes呢?在读取细胞后,它真的会在培养基信息上仔细观察它们吗?@Aidan那么它应该会起作用,ParseExact完全是为您的情况而创建的。@Scott:2011年3月5日00:00:00时,我仍然从我的牢房中获取,而不是2011年5月3日,当我的牢房遇到第一个正常条目时,我应该使用ParseExact错误来获取和获取。ParseExact的第二个字段的输入内容是什么?@Scott Chamberlain Good catch;将/添加到格式字符串中。将线程设置为我的区域设置也不会起作用。谢谢。是的,当我在搜索其他有类似问题的人时,我也想到了这一点。使用.Text返回我而不是输入的内容。我觉得Excel做的事情一定很奇怪,但就我的一生而言,我似乎无法摆脱它。所有单元格都已格式化并设置为正确的区域设置,但如果将其设置为文本,则将显示40607个样式条目。我不想在阅读之前改变单元格格式,但现在看起来
没有选择…文本会在应用所有格式后返回电子表格中显示的内容,等等。因此,如果列不够宽,无法显示日期格式,则它将返回唯一的方式。它真的显示在电子表格中吗?你能加宽这个列吗?改变单元格格式并不能解决这个问题。Excel确实分析了错误的日期,它交换了月份和日期值。您可以通过更改为2011年6月22日样式的格式来验证这一点。不,在文件中,无论我将单元格更改为何种格式,它始终显示正确的日期-2011年5月3日、2011年5月3日、2011年5月3日等。