-2

我希望我的程序随机选择一个日期作为出生日期。第一个随机数字是年份,第二个是月份,最后一个是日期。

Random rand = new Random();
for (int i = 0; i < antal; i++)
    array[i].Number = rand.Next(00, 99) +
                      rand.Next(01, 12) +
                      rand.Next(01, 30);

但是,如果随机数小于 10,比如 3,我希望它显示“03”,而不仅仅是“3”。有没有办法在 C# 中做到这一点?或者有没有更好的方法来随机化出生日期?

4

8 回答 8

6

数字没有格式——整数就是整数,所以数字三可以同样表示为 03、3、0x3 等。

此外,您只是添加数字 - 您没有连接字符串表示。所以第一个数字可能是 50,第二个可能是 6,第三个可能是 3……所以你最终得到 59,而不是 500603,这可能是你所期望的。

可以简单地将年份乘以 10000,将月份乘以 100,但存储一个DateTime值肯定会更好。

获得(比如说)1950 年和 2050 年之间的随机日期的最简单方法是:

int year = random.Next(100) + 1950;
int daysInYear = DateTime.IsLeapYear(year) ? 366 : 365;
DateTime date = new DateTime(year, 1, 1).AddDays(random.Next(daysInYear));

通过这种方式,您可以获得一年中所有正确的日子,没有无效的日子 - 例如,在您的原始代码中,您很容易在 2 月 30 日结束...假设您实际上已修复您的代码以考虑到事实上,第二个论点Random.Next排他性的而不是包容性的。(否则你永远不会得到第 30 个,你也永远不会得到 12 月的值......)

尽可能使用最合适的数据类型很重要。如果要表示日期,请使用与日期相关的类型。如果要表示文本,请使用字符串。如果要表示数字,请使用适当的数字类型。你会发现,如果你使用正确的数据类型,你可以摆脱很多错误。

于 2013-05-06T11:24:46.440 回答
4
string.Format("{0:00}",1); //Prints 01
string.Format("{0:00}",2); //Prints 02
于 2013-05-06T11:24:13.623 回答
0
rnd.Next(0, 99).ToString("D2");

这将确保数字在数字的字符串表示中最小为 2 位。

array[i].Number = rand.Next(00, 99)ToString("D2") +
                  rand.Next(01, 12)ToString("D2") +
                  rand.Next(01, 30)ToString("D2");
于 2013-05-06T11:25:11.333 回答
0

您可以将整数转换为字符串并发送格式。

int Number = 3;

String NumberInString = Number.ToString("00"); //Will return 03
于 2013-05-06T11:25:50.493 回答
0

数字不知道格式。您可以格式化字符串。

String.PadLeft如果你已经有一个字符串,你可以使用:

string day = "1"; 
day = day.PadLeft(2, '0');

如果day是数字:

int day = 1;
string dayStr = day.ToString("D2");

用前导零填充数字

演示

于 2013-05-06T11:26:23.757 回答
0

您可以像这样格式化您的数字:

n.ToString("00");

在你的情况下(假设你Number是一个数字):

array[i].Number.ToString("00")

或者,如果Number是一个字符串:

array[i].Number = rand.Next(00, 99).ToString("00") +
                  rand.Next(01, 12).ToString("00") +
                  rand.Next(01, 30).ToString("00");

使用您的整个日期解决方案(假设您Number是一个数字):

Console.WriteLine(string.Format("{0:00}-{1:00}-{2:00}", array[0].Number, array[1].Number, array[2].Number);
于 2013-05-06T11:26:34.227 回答
0

您将随机数作为单个数字,但是当您打印它时,您将其打印为 0。前缀 0 可以用于字符串,但没有语言编译器会帮助您存储“05”而不是“5”一个int变量!

于 2013-05-06T11:40:49.577 回答
0

首先在今天和 1900 年 1 月 1 日之间创建您的随机日期

    DateTime start = new DateTime(1900, 1, 1);
    Random gen = new Random();

    int range = (DateTime.Today - start).TotalDays;           
    var myRandomDate = start.AddDays(gen.Next(range));

然后格式化日期以实现小于 10 天的“0 pad”。

    myRandomDate.ToString("MM-dd-yyyy");
于 2013-05-06T11:52:04.293 回答