0

我正在尝试使用 LINQ 查询在网格视图控件中显示小时以及 AM 或 PM。问题是系统无法处理连接的字符串以及 DateTime 变量。这是我的 LINQ 查询:

var data = (from x in context.Races
            where x.RaceDate.Year == selectedDate.Year && x.RaceDate.Month == selectedDate.Month && 
            x.RaceDate.Day == selectedDate.Day
                            select new RegistrationSchedule
                            {
                                RaceDate = x.RaceDate.Hour <= 11 ? x.RaceDate.Hour + " AM" : x.RaceDate.Hour + " PM",
                                Comment = x.Certification.Description + " - " + x.Comment,
                                Run = char.Parse(x.Run),
                                NumberOfCars = x.NumberOfCars
                            }
                 );

                return data.ToList();

例如,我试图在查询结果中显示的内容应该类似于“上午 10 点”,如果时间在 11 点之前,系统会将上午添加到其中。在 Linqpad 中设置查询,系统将 DateTime 与附加的字符串连接起来没有问题。我试图找到一些有关如何将 DateTime 对象转换为显示 AM 或 PM 的信息,但没有找到任何可能在查询中起作用的信息。任何帮助,将不胜感激!

4

2 回答 2

2

您不应尝试将string(AM/PM 文字) 连接到DateTime. 相反,您应该在显示 DateTime 时将其格式化为所需的格式。

要显示小时和上午/下午,以下应该很有用。

Console.WriteLine( dateTime.ToString("h tt")); 

或者

Console.WriteLine( $"{dateTime:h tt}"); 
于 2019-12-02T00:21:11.260 回答
1

您可以使用格式字符串以您喜欢的任何格式打印日期:

void Print12Hour(DateTime dateTime)
{
    Console.WriteLine($"{dateTime:yyyy-MM-dd hh:mm tt});
}

这里hh将以 12 小时格式为您提供时间,并且tt是 AM/PM 后缀。

于 2019-12-01T23:15:24.807 回答