字符串中的日期时间分别添加时间和日期

时间:2018-12-10 12:57:55

标签: c# datetime

我要在两个字符串字段中获取日期时间的一部分,我正在使用以下方法将日期转换为有效的日期时间,但是如何将其以24小时格式添加时间元素。 您将看到以下两个意思是它是于18年8月18日在0908订购的

使用以下方法,我将如何以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中的有效日期时间字段

enter image description here

2 个答案:

答案 0 :(得分:3)

尝试将日期部分解析为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

答案 1 :(得分:1)

为什么不仅仅在解析之前就进行连接?

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