我要在两个字符串字段中获取日期时间的一部分,我正在使用以下方法将日期转换为有效的日期时间,但是如何将其以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中的有效日期时间字段
答案 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