C# Datetime来自分别添加时间和日期的字符串

C# Datetime来自分别添加时间和日期的字符串,c#,datetime,C#,Datetime,我在两个字符串字段中找到了日期时间的一部分,我使用下面的方法将日期转换为datetime,这很有效,但是如何在24小时格式中添加时间元素呢。 你会看到下面的两个意思是它是在2018年8月12日9时08分订购的 使用以下方法,我将以24小时格式附加0808的时间元素,以便获得有效的日期-时间结果 DateTime dt = DateTime.ParseExact( TrasnactionDate, "ddMMyy", System.Globalization.CultureIn

我在两个字符串字段中找到了日期时间的一部分,我使用下面的方法将日期转换为datetime,这很有效,但是如何在24小时格式中添加时间元素呢。 你会看到下面的两个意思是它是在2018年8月12日9时08分订购的

使用以下方法,我将以24小时格式附加0808的时间元素,以便获得有效的日期-时间结果

DateTime dt = DateTime.ParseExact(
   TrasnactionDate, 
  "ddMMyy", 
   System.Globalization.CultureInfo.InvariantCulture);

string outp = dt.ToString("yyyy/MM/dd");
时间元素存储在名为字符串TransactionTime的变量中

因此,最终结果将是我所要求的有效日期和时间

"081218","0908",

"071218","0919",
编辑2 好的,我试着按照下面的建议添加它们,但我有一个空日期

 DateTime dt = DateTime.ParseExact(TrasnactionDate + TransactionTime, "ddMMyy", System.Globalization.CultureInfo.InvariantCulture);
            string outp = dt.ToString("yyyy/MM/dd HH:mm");
结果是0001/01/01 00:00,而应该是2018/08/12 09:08

编辑3 我现在有以下资料:

 DateTime totalDateTime = DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
DateTime.ParseExact(TransactionTime, "HHmm", CultureInfo.InvariantCulture).TimeOfDay; 
string outp = totalDateTime.ToString("yyyyMMdd HH:mm:ss");
但我需要它的格式

yyyyMMdd HH:mm
但它是说,当我把它填入日期时间字段时,它是无效的。请有人告诉我这是一个无效值:

20181211 09:08:00

编辑4

在sql中显示该字段是有效的日期时间字段


为什么不在解析之前进行concat

var dateTimeStr = TransactionDate + TransactionTime;
var result = DateTime.ParseExact(dateTimeStr, "ddMMyyHHmm", CultureInfo.InvariantCulture);
另一种方式:

var result = DateTime.ParseExact(TransactionDate, "ddMMyy", CultureInfo.InvariantCulture)
+ TimeSpan.ParseExact(TransactionTime, "hhmm", CultureInfo.InvariantCulture);
之后,您可以输出您喜欢的任何字符串格式:

result.ToString("yyyyMMdd HH:mm", CultureInfo.InvariantCulture);
// 20181211 09:08

result.ToString("yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture);
// 20181211 09:08:00

result.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
// 2018-12-11 09:08:00
尝试将日期部分解析为
DateTime
,但将时间部分解析为
TimeSpan
;然后可以添加两个部分:

string TrasnactionDate = "081218";
string TrasnactionTime = "0908";

DateTime dt = 
  DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
  TimeSpan.ParseExact(TrasnactionTime, "hhmm", CultureInfo.InvariantCulture);
编辑:另一种可能性是

// HH - we use 24 hours time representation (see juharr's comment) 
DateTime dt = 
  DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
  DateTime.ParseExact(TrasnactionTime, "HHmm", CultureInfo.InvariantCulture).TimeOfDay;
演示:

var tests = new string[][] {
  new string[] { "081218", "0908"},
  new string[] { "071218", "0919"},
};

DateTime[] result = tests
  .Select(line => new {
    TrasnactionDate = line[0],
    TrasnactionTime = line[1],
  })
  .Select(item => 
     DateTime.ParseExact(item.TrasnactionDate, 
                        "ddMMyy", 
                         CultureInfo.InvariantCulture) +
     DateTime.ParseExact(item.TrasnactionTime, 
                        "HHmm", 
                         CultureInfo.InvariantCulture).TimeOfDay)
  .ToArray();

  string report = string.Join(Environment.NewLine, result
    .Select(date => $"{date:yyyy/MM/dd HH:mm}"));
2018/12/08 09:08
2018/12/07 09:19
结果:

var tests = new string[][] {
  new string[] { "081218", "0908"},
  new string[] { "071218", "0919"},
};

DateTime[] result = tests
  .Select(line => new {
    TrasnactionDate = line[0],
    TrasnactionTime = line[1],
  })
  .Select(item => 
     DateTime.ParseExact(item.TrasnactionDate, 
                        "ddMMyy", 
                         CultureInfo.InvariantCulture) +
     DateTime.ParseExact(item.TrasnactionTime, 
                        "HHmm", 
                         CultureInfo.InvariantCulture).TimeOfDay)
  .ToArray();

  string report = string.Join(Environment.NewLine, result
    .Select(date => $"{date:yyyy/MM/dd HH:mm}"));
2018/12/08 09:08
2018/12/07 09:19

你已经试过什么了?你在哪里遇到问题?将时间结果添加到日期结果中。@dymanoid如果他知道要尝试什么,他不会问。你能解释一下“它”到底是什么吗,这说明?@marsze在屏幕截图中显示,因为时间部分不包括上午/下午,我猜他们需要使用24小时格式
HH
。@juharr:no
H
表示
DateTime
,当我将
TrasnactionTime
解析为
TimeSpan
1908
而不是
0908
将是
19
小时和
8
分钟)是的,Timespan不知道AM/PM的情况,因此如果OP需要处理这一点,那么他们将不得不连接。@Dave检查格式字符串。这不正确。您必须使用
“ddMMyyHHmm”
@marsize我不能让它进入sap,它需要它yyyyddmm@Dave您可以输出您喜欢的任何格式,请参见my edit.var result=DateTime.ParseExact(TrasActionDate,“ddMMyy”,CultureInfo.InvariantCulture)+TimeSpan.ParseExact(TransactionTime,“hhmm”,CultureInfo.InvariantCulture);DateTime _date=Convert.ToDateTime(result.ToString(“yyyyMMdd HH:mm”);@Dave
result
已经是日期时间。无需使用Convert。