ShardingContainer类中采用的日期格式化方式为斜杠分隔, 如"yyyy/MM/dd HH:mm:00"
public IShardingBuilder SetDateSharding<TEntity>(string shardingField, ExpandByDateMode expandByDateMode, params (DateTime startTime, DateTime endTime, string sourceName)[] ranges)
{
//...
(string conExpression, string startTimeFormat, Func<DateTime, DateTime> nextTime) paramter =
expandByDateMode switch
{
ExpandByDateMode.PerMinute => ("0 * * * * ? *", "yyyy/MM/dd HH:mm:00", x => x.AddMinutes(1)),
ExpandByDateMode.PerHour => ("0 0 * * * ? *", "yyyy/MM/dd HH:00:00", x => x.AddHours(1)),
ExpandByDateMode.PerDay => ("0 0 0 * * ? *", "yyyy/MM/dd 00:00:00", x => x.AddDays(1)),
ExpandByDateMode.PerMonth => ("0 0 0 1 * ? *", "yyyy/MM/01 00:00:00", x => x.AddMonths(1)),
ExpandByDateMode.PerYear => ("0 0 0 1 1 ? *", "yyyy/01/01 00:00:00", x => x.AddYears(1)),
_ => throw new Exception("expandByDateMode参数无效")
};
//确保之前的表已存在
var theTime = ranges.Min(x => x.startTime);
theTime = DateTime.Parse(theTime.ToString(paramter.startTimeFormat));
//...
}
可能在特定环境下在执行DateTime.Parse(theTime.ToString(paramter.startTimeFormat));时产生错误FormatException: String '2023年04年01 00:00:00' was not recognized as a valid DateTime., 如图:

日期在按照""yyyy/MM/dd HH:mm:ss""格式化时未被格式化为"2023年05月01", 却变成了"2023年05年01", "/"均被替换成了"年".
使用环境为 .NET 6, WIN10专业版中文环境(非常常见的环境), 未发现特殊影响因素.
测试发现可能是VS或电脑本身因素导致本问题, 如统一采用横杠等格式可以避免此类问题带来的影响, 如"yyyy-MM-dd HH:mm:ss".

ShardingContainer类中采用的日期格式化方式为斜杠分隔, 如"yyyy/MM/dd HH:mm:00"可能在特定环境下在执行


DateTime.Parse(theTime.ToString(paramter.startTimeFormat));时产生错误FormatException: String '2023年04年01 00:00:00' was not recognized as a valid DateTime., 如图:日期在按照
""yyyy/MM/dd HH:mm:ss""格式化时未被格式化为"2023年05月01", 却变成了"2023年05年01", "/"均被替换成了"年".使用环境为 .NET 6, WIN10专业版中文环境(非常常见的环境), 未发现特殊影响因素.
测试发现可能是VS或电脑本身因素导致本问题, 如统一采用横杠等格式可以避免此类问题带来的影响, 如
"yyyy-MM-dd HH:mm:ss".