使用DateTime和Employee计数,然后使用0填充其余数字

时间:2012-09-11 07:21:34

标签: c# datetime counter

我正在尝试创建一个简单的Employee类,它会增加每个创建的empolyee实例的员工数量。 这非常简单,除了我被要求创建应该使用当前年份(使用DateTime对象)构建的员工编号和当前员工数量用前导零填充,以便员工编号始终为8个字符,例如如果第十名员工是在2013年创建的,则员工编号为20130010.您无需每年重置员工柜台。

现在我已经完成了整个

string year = DateTime.Now.ToString();

并增加了empoylee数, 但是我很困惑如何用0来填补剩余的空白。

任何帮助都会受到赞赏,因为这可能是一个非常简单的解决方案。

谢谢

4 个答案:

答案 0 :(得分:2)

应该很简单。

但请使用年份而非完整日期。

下面的代码段:

string id = DateTime.Now.Year.ToString() + 10.ToString("0000");

答案 1 :(得分:2)

如果我理解正确,您可能只想在您的号码中添加前导零。

string year = DateTime.Now.Year.ToString();
int EmpNumber = 1;
string newNumber = year + EmpNumber.ToString("D4");

输出为:"20120001"

您可能会看到:How to: Pad a Number with Leading Zeros

答案 2 :(得分:0)

你想使用这样的东西:

var employeeId = string.Format("{0}{1:D4}", DateTime.Now.Year, runningNumber);

答案 3 :(得分:0)

您需要查看String.PadLeft方法。

string employeeId = string.Concat(DateTime.Now.Year.ToString(), (lastEmployeeId + 1).ToString().PadLeft(4, '0');

您可能需要考虑使用Oracle序列或SQLServer auto_increment,因为您可能遇到线程/同步问题(即两个员工同时创建并分配了相同的员工ID)。

同时,只有在必要时才能将员工数量跟踪为优化。如果您没有性能问题,可以使用COUNT(在数据库上或内存List<Employee>)语句中获取员工数量。

跟踪员工名单和员工人数违反了Single Source of Truth。我向你保证,一旦事情变得更加复杂,你就会遇到麻烦:在某些时候,两个计数会(由于某种原因)会有所不同......