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

问题描述 投票:2回答:2

我在两个字符串字段中获取日期时间的一部分我使用以下内容将日期转换为有效的日期时间但是如何以24小时格式添加时间元素。你会看到下面这两个意味着它是在8月12日在0908订购的

使用以下内容如何以24小时格式附加0808的时间元素,以便获得有效的日期时间结果。

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

string outp = dt.ToString("yyyy/MM/dd");

time元素存储在一个名为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

c# datetime
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.