【问题标题】:java: Random Time generatorjava: 随机时间生成器
【发布时间】:2013-02-05 17:33:07
【问题描述】:

如何生成随机的Time 值?例如:07:02:3308:52:14 等。我知道如何生成随机数但我不知道如何执行此操作。我想用随机值填充我的数据库列TIME

【问题讨论】:

标签: java random time random-time-generation


【解决方案1】:
import java.util.Random;
import java.sql.Time;

final Random random = new Random();
final int millisInDay = 24*60*60*1000;
Time time = new Time((long)random.nextInt(millisInDay));

出于您的目的,这可能就足够了。不要忘记,有些日子有不同的长度,您可能需要添加测试用例(夏令时和闰秒)。

【讨论】:

    【解决方案2】:

    java.util.Date 只是一个 long 值的包装器(自纪元以来的毫秒数)。因此,您可以简单地使用Random.nextLong() 生成随机长值,并将结果包装在new Date(result) 中。您可以将这些日期实例传递给您的 JDBC 驱动程序。

    【讨论】:

      【解决方案3】:

      在,java1.8

      Random generator = new Random(seed); LocalTime time = LocalTime.MIN.plusSeconds(generator.nextLong());

      【讨论】:

        【解决方案4】:

        使用像here RandomUtil class 这样的随机生成器,您可以在一些值之间生成随机日期,甚至更多。

        使用此类的代码示例:

        如果您需要从现有日期更新时间,您可以使用这样的代码。只需将 System.currentTimeMillis() 替换为数据库中的日期即可。

        java.util.Date dateFromDB = new java.util.Date(System.currentTimeMillis());
        

        日历 calendarFromDB = Calendar.getInstance();

        calendarFromDB.setTime(dateFromDB);

        java.util.Date randomDate = RandomUtil.getRandomDate(new java.util.Date(RandomUtil.getMinimumDate()), new java.util.Date(RandomUtil.getMaximumDate()), false);
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(randomDate);
        
        calendarFromDB.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
        calendarFromDB.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE));
        calendarFromDB.set(Calendar.SECOND, calendar.get(Calendar.SECOND));
        
        dateFromDB = calendarFromDB.getTime();
        

        样本输出:

        7 月 26 日星期二 02:30:27 CET 157737154

        或者如果你想要一些日期之间的随机日期或时间

        java.util.Date randomDate = RandomUtil.getRandomDate(new java.util.Date(RandomUtil.getMinimumDate()), new java.util.Date(RandomUtil.getMaximumDate()), false);
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println(sdf.format(randomDate));
        

        样本输出:

        22:29:15

        【讨论】:

          【解决方案5】:

          如果您可以使用第三方库,这里有一种使用 Joda Time 的方法。您需要调整代码以适应您的场景:

          final Random random = new Random();
          for (int i = 0; i < 10; i++) {
              final LocalTime time = new LocalTime(random.nextLong());
              System.out.println(time);
          }
          

          样本输出:

          01:58:24.328
          10:59:20.576
          07:52:40.011
          11:53:54.524
          13:43:57.474
          21:51:25.032
          11:46:35.988
          16:20:20.224
          09:47:10.404
          22:35:43.337
          

          【讨论】:

          • 我认为这里不需要 joda 时间;特别是因为他在谈论数据库,并且很可能 JDBC 驱动程序会期望 java.util.Date
          • 很有可能,如果他在他的数据库中存储一个 TIMESTAMP,那么他可以用Date 替换LocalTime
          【解决方案6】:

          不看如何生成随机时间戳,如果你知道如何生成随机数,不如每次生成3个随机数,这样你就可以做一个随机时间值了?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-06
            • 2012-06-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-15
            • 2022-12-04
            相关资源
            最近更新 更多