天道酬勤,学无止境

java: Random Time generator

How do I generate random Time values? For example: 07:02:33, 08:52:14, etc. I know how to generate random numbers but I don't know how to do this. I want to fill my database column TIME with random values.

评论

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));

For your purposes this might be enough. Don't forget that some days have different lengths for which you might need to add test cases (daylight savings and leap seconds).

A java.util.Date is merely a wrapper around a long value (milliseconds since the epoch). Therefore, you could simply generate random long values with Random.nextLong(), and wrap the result within a new Date(result). These date instances you can pass to your JDBC driver.

In, java1.8

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

Using Random Generator like one here RandomUtil class you can make random dates between some values and much more.

Code examples using this class:

If you need to update time from existing date you can use code like this. Just replace System.currentTimeMillis() with date from database.

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

Calendar 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();

Sample output:

Tue Jul 26 02:30:27 CET 157737154

or if you want just random date or time between some dates

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));

Sample output:

22:29:15

If you can use a third party library heres a way to do it using Joda Time. You will need to tweak the code to fit your scenario:

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

Sample output:

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

Without looking at how to generate random timestamps, if you know how to generate random numbers, how about you generate 3 random numbers each time so that you can make a random time value?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Java 随机数 Random集合
    1. Math.random() 静态方法 产生的随机数是 0 - 1 之间的一个 double,即 0 <= random <= 1。 for (int i = 0; i < 10; i++) { System.out.println(Math.random()); } 结果: 0.3598613895606426 0.2666778145365811 0.25090731064243355 0.011064998061666276 0.600686228175639 0.9084006027629496 0.12700524654847833 0.6084605849069343 0.7290804782514261 0.9923831908303121 实现原理: When this method is first called, it creates a single new pseudorandom-number generator, exactly as if by the expression new java.util.Random() This new pseudorandom-number generator is used thereafter for all calls to this method and is used nowhere else
  • Java random随机数/ seed 种子 / System.nanoTime() 的理解 与 使用
    伪随机(preundorandom):通过算法产生的随机数都是伪随机!! 只有通过真实的随机事件产生的随机数才是真随机!!比如,通过机器的硬件噪声产生随机数、通过大气噪声产生随机数 Random生成的随机数都是伪随机数!!! 是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性) Random类拥有两个构造方法,用于实现随机数生成器: Random( )构造一个随机数生成器,种子是 与nanoTime异或后的值。每遍输出的多个序列均不同。随机性更强。Random(long seed)用种子seed构造一个随机数生成器,种子是给定的。每遍输出的多个序列均相同。 /** * Creates a new random number generator. This constructor sets * the seed of the random number generator to a value very likely * to be distinct from any other invocation of this constructor. */ public Random() { this(seedUniquifier() ^ System.nanoTime())
  • 使用Java 7或Java 6生成随机UUID的性能(Performance of Random UUID generation with Java 7 or Java 6)
    问题 我有一个基于Web的Java应用程序,该应用程序会为会话信息生成随机的UUID。 我们的一名测试人员声称可以根据自己的分析来产生最长350ms的时间来生成UUID,但我仍无法复制他的结果。 他指向这篇文章http://www.cowtowncoder.com/blog/archives/2010/10/entry_429.html来帮助备份他的结果。 我想看看是否有人在Java 6或Java 7应用程序中使用Java的内置UUID生成功能遇到了此限制。 回答1 我测试了 for (;;) { long t0 = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { UUID.randomUUID(); } System.out.println(System.currentTimeMillis() - t0); } 在我的PC上大约是1100毫秒,这非常慢。 UUID.randomUUID()在内部使用SecureRandom,为使其更快,我们可以使用常规的java.util.Random Random r = new Random(); for (;;) { .. new UUID(r.nextLong(), r.nextLong()); 大约80毫秒 回答2 这是Beta 127中的测试运行。 请记住
  • 【Java基础】随机数Random和SecureRandom基本用法
    文章目录 生成随机数的几种方法一. Math.random()二. java.util.Random工具类三. java.util.concurrent.ThreadLocalRandom 工具类四. java.Security.SecureRandom(继承至java.util.Random)五. Apache Commons-Lang 包中的 RandomStringUtils 类 生成随机数的几种方法 Math.random()一随机数java.util.Random伪随机数(线性同余法生成)java.util.concurrent.ThreadLocalRandom 工具类java.security.SecureRandom 真随机数Apache Commons-Lang 包中的 RandomStringUtils 类 一. Math.random() Math.random():(产生[0,1)范围的double随机数) 源码分析 public static double random() { Random rnd = randomNumberGenerator; if (rnd == null) rnd = initRNG(); return rnd.nextDouble(); } private static Random randomNumberGenerator
  • 如何在Java中生成随机时间戳?(how to generate a random timestamp in java?)
    问题 我想生成一个随机时间戳,并向其添加一个随机增量,以生成第二个时间戳。 那可能吗? 如果我传递随机的long值来创建时间戳,并且我想随机生成该long值,那么生成该值以给出2012年的时间戳的约束是什么? 回答1 您需要将随机数缩放到特定年份的范围内,然后将年份的开始添加为偏移量。 一年中的毫秒数从一年到另一年(le年有额外的一天,某些年份有leap分钟,依此类推),因此您可以按以下步骤确定范围: long offset = Timestamp.valueOf("2012-01-01 00:00:00").getTime(); long end = Timestamp.valueOf("2013-01-01 00:00:00").getTime(); long diff = end - offset + 1; Timestamp rand = new Timestamp(offset + (long)(Math.random() * diff)); 回答2 例如,传递给Date的long值在2012年应该在1325397600和1293861599之间。请尝试使用此网站进行检查! 要生成随机日期,您可以执行以下操作: Random r =new Random(); long unixtime=(long) (1293861599+r.nextDouble()*60*60*24
  • Java随机数不是随机的吗?(Java random numbers not random?)
    问题 当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。 我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他所获得的相同的确切数字。 我究竟做错了什么? import java.util.*; public class TestCode{ public static void main(String[] args){ int sum = 0; Random rand = new Random(100); for(int x = 0; x < 100; x++){ int num = (rand.nextInt(100)) + 1; sum += num; System.out.println("Random number:" + num); } //value never changes with repeated program executions. System.out.println("Sum: " + sum); } } 100个数字中的最后五个数字是: 40 60 27 56 53 回答1 您已为常数值为100的随机生成器植入了种子。 它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用100作为种子,但是种子值与生成的值范围无关(该值的范围由其他方式控制,例如您已经拥有的nextInt的调用)。
  • 【java】java 随机数 Random ThreadLocalRandom SecureRandom
    文章目录 1.概述2. Random 和 ThreadLocalRandom区别3.SecureRandom区别4.快速小结 1.概述 出自:《java性能权威指南》 Java 7 提 供 了 3 个 标 准 的 随 机 数 生 成 器 类:java.util.Random、 java.util.concurrent.ThreadLocalRandom 以及java.security.SecureRandom。这三个类在性能方面差距很大。 2. Random 和 ThreadLocalRandom区别 Random 和 ThreadLocalRandom 两个类的差别是, Random 类的主要操作( nextGaussian())是同步的。任何要获取随机值的方法都会用到这个方法,所以不管如何使用该随机数生成器,都会存在锁竞争:如果两个线程同时使用同一随机数生成器, 那一个线程要等待另一个先完成其操作。之所以会使用 ThreadLocalRandom,原因就在于此:每个线程都有自己的 随机数生成器, Random 类的同步就不是问题了。(正如第 7 章所讨论的,因为创建对象成本很高,而 ThreadLocalRandom 类会重用对象,所以有很大的性能优势。) 3.SecureRandom区别 SecureRandom 类与上面介绍的两个类的区别是,所用的算法不同。 Random
  • 使用 java.time 生成随机 LocalDate(Generate a random LocalDate with java.time)
    问题 我正在编写一些代码来使用随机数据填充 MySQL 数据库以进行测试。 我需要用 1970-2015 年的随机日期填充DATE列。 这是相关的方法: public Date dateGenerator() throws Exception { Random ry = new Random(); Random rm = new Random(); Random rd = new Random(); int year = 1969 + ry.nextInt(2015-1969+1); int month = 1 + rm.nextInt(12); int day = 1 + rm.nextInt(31); if (month==2 && day>28){ day = day - 3; } else { if((month%2==0 && month != 8 ) && day==31 ){ day = day -1; } } } 我的目的是创建三个随机整数(用于日、月、年)并以某种方式将它们组合成某个 Date 对象以传递给数据库。 但是数据库拒绝了我尝试提供的所有内容。 如果可能的话,如果您能向我提供基于最新java.time库的建议,那对我来说将是非常有教育意义的。 回答1 一个简单的方法是将最小和最大日期转换为其相应的纪元日,在这两个值之间生成一个随机整数
  • 产生随机的出生日期(Generate random date of birth)
    问题 我正在尝试使用Java程序为数据库中的人们生成一个随机的出生日期。 我该怎么做? 回答1 import java.util.GregorianCalendar; public class RandomDateOfBirth { public static void main(String[] args) { GregorianCalendar gc = new GregorianCalendar(); int year = randBetween(1900, 2010); gc.set(gc.YEAR, year); int dayOfYear = randBetween(1, gc.getActualMaximum(gc.DAY_OF_YEAR)); gc.set(gc.DAY_OF_YEAR, dayOfYear); System.out.println(gc.get(gc.YEAR) + "-" + (gc.get(gc.MONTH) + 1) + "-" + gc.get(gc.DAY_OF_MONTH)); } public static int randBetween(int start, int end) { return start + (int)Math.round(Math.random() * (end - start)); } } 回答2 java
  • Java - 生成随机盐不是随机的(Java - Generating a random salt isn't random)
    问题 我正在尝试在 Java 中生成一个盐,以与散列算法一起使用以实现安全密码存储。 我正在使用以下代码来创建随机盐: private static String getSalt() throws NoSuchAlgorithmException { SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); byte[] salt = new byte[16]; sr.nextBytes(salt); System.out.println(salt.toString()); return salt.toString(); } 这应该生成一个完全安全的、随机生成的盐,用于我的散列算法。 然而,当我运行代码时,它每次都输出相同的盐......表明生成的盐根本不是随机的。 出于明显的安全目的,每个用户都需要一个唯一的盐,但是如果我每次创建新帐户时都使用此代码,那么每个用户都将拥有相同的盐,这首先就违背了拥有它的目的。 我的问题是:为什么这总是给我相同的盐,我该怎么做才能确保每次运行代码时生成的盐是完全随机的? 编辑: 我想我会包含整个散列程序的源代码,现在已经修复并正常工作。 这是一个简单的原型,用于模拟在创建帐户时生成哈希,然后在登录系统时检查密码。 package hashingwstest; import java
  • Java - Generating a random salt isn't random
    I'm trying to generate a salt in Java to use with a hashing algorithm for secure password storage. I'm using the following code to create the random salt: private static String getSalt() throws NoSuchAlgorithmException { SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); byte[] salt = new byte[16]; sr.nextBytes(salt); System.out.println(salt.toString()); return salt.toString(); } Which should generate a completely secure, randomly generated salt to use in my hashing algorithm. When I run the code however, it keeps outputting the same salt every time... Indicating that the salt being
  • 随机生成器每次都给我相同的数字(Random generator giving me the same number everytime)
    问题 import java.util.Random; public class Fighter { int str; int dex; int hth; Random gen = new Random(1535636); public Fighter() { str = gen.nextInt(9); dex = gen.nextInt(9); hth = gen.nextInt(14); } public int getHth(){ return hth; } public int getStr(){ return str; } public int getDex(){ return dex; } } import java.util.Random; public class Arena { public static void main(String[] args) { Random gen = new Random(); Fighter Guy1 = new Fighter(); int x =1; while (x < 200000000){ x++; } Fighter Guy2 = new Fighter(); int hth1 = Guy1.getHth(); int hth2 = Guy2.getHth(); System.out.println("Fight
  • 为什么使用随机字符串的此代码会打印“ hello world”?(Why does this code using random strings print “hello world”?)
    问题 以下打印语句将打印“ hello world”。 有人可以解释吗? System.out.println(randomString(-229985452) + " " + randomString(-147909649)); 和randomString()看起来像这样: public static String randomString(int i) { Random ran = new Random(i); StringBuilder sb = new StringBuilder(); while (true) { int k = ran.nextInt(27); if (k == 0) break; sb.append((char)('`' + k)); } return sb.toString(); } 回答1 当使用特定的种子参数(在这种情况下为-229985452或-147909649 )构造java.util.Random的实例时,它将遵循以该种子值开头的随机数生成算法。 使用相同种子构造的每个Random数每次都会生成相同的数字模式。 回答2 其他答案解释了原因,但这是如何做的。 给定Random一个实例: Random r = new Random(-229985452) r.nextInt(27)生成的前6个数字是: 8 5 12 12 15 0 而r
  • Generate a random LocalDate with java.time
    I'm writing some code to populate a MySQL database with random data for testing purposes. I need to populate a DATE column with random dates from 1970-2015. Here's the relevant method: public Date dateGenerator() throws Exception { Random ry = new Random(); Random rm = new Random(); Random rd = new Random(); int year = 1969 + ry.nextInt(2015-1969+1); int month = 1 + rm.nextInt(12); int day = 1 + rm.nextInt(31); if (month==2 && day>28){ day = day - 3; } else { if((month%2==0 && month != 8 ) && day==31 ){ day = day -1; } } } My purpose is to create three random integers (for day, month, year)
  • Java –生成随机字符串
    用纯Java生成随机无界字符串 @Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { byte[] array = new byte[7]; // length is bounded by 7 new Random().nextBytes(array); String generatedString = new String(array, Charset.forName("UTF-8")); System.out.println(generatedString); } 用纯Java生成随机有界字符串 接下来–让我们看一下如何创建一个更受限的随机字符串;我们将使用小写字母字母和设置的长度生成一个随机字符串: @Test public void givenUsingPlainJava_whenGeneratingRandomStringBounded_thenCorrect() { int leftLimit = 97; // letter 'a' int rightLimit = 122; // letter 'z' int targetStringLength = 10; Random random = new Random(); StringBuilder
  • 在Java中获取随机布尔值(Get random boolean in Java)
    问题 好的,我在代码中实现了这个SO问题:随机返回True或False 但是,我的行为很奇怪:我需要同时运行十个实例,每个实例每次运行仅返回一次true或false。 令人惊讶的是,无论我做什么,每次我得到的都是false 有什么方法可以改进这种方法,以便我至少有大约50%的机会可以true 。 为了使它更易于理解:我将我的应用程序构建到JAR文件中,然后通过批处理命令运行该文件 java -jar my-program.jar pause 程序的内容-使其尽可能简单: public class myProgram{ public static boolean getRandomBoolean() { return Math.random() < 0.5; // I tried another approaches here, still the same result } public static void main(String[] args) { System.out.println(getRandomBoolean()); } } 如果我打开10个命令行并运行它,每次都会得到false结果... 回答1 我建议使用Random.nextBoolean() 话虽如此,您使用过的Math.random() < 0.5也是有效的。 这是我机器上的行为: $ cat
  • Java并发编程之美读书笔记5-Java并发包中ThreadLocalRandom类原理剖析
    文章目录 1. Random类2. Random类源码分析2.1 构造函数部分2.2 随机生成数部分2.3 Random类问题分析 3. ThreadLocalRandom类4. ThreadLocalRandom源码分析4.1 构造函数部分4.2 随机数的生成4.3 注意事项 5. 性能测试6. 小结 1. Random类 Random类常常用来获取某个随机数的生成,如下: //1.获取一个int范围内的随机数 new Random().nextInt(); //2.获取一个指定范围为[0,5)之间的随机数 new Random().nextInt(5); 但是看起来没有任何问题的同时,没想到却存在线程安全问题。 2. Random类源码分析 1.首先创建一个下面测试方法: public class RandomTest { public static void main(String[] args) { //(1)获取一个随机生成数 Random random = new Random(); //(2)输出10个0-5之间的随机数 for (int i=0; i<10; i++) { System.out.println(random.nextInt(5)); } } } 上面是一个简单的生成随机数的方法,分为两部分查看:构造函数部分、生成随机数部分。 2.1 构造函数部分
  • java随机数中的陷阱
    1 前言 随机数我们应该不陌生,业务中我们用它来生成验证码,或者对重复性要求不高的id,甚至我们还用它在年会上搞抽奖。今天我们来探讨一下这个东西。如果使用不当会引发一系列问题。2java中的随机数我们需要在Java中随机生成一个数字。java开发中我们通常使用java.util.Random来搞,它提供了一种伪随机的生成机制。Jvm 通过传入的种子(seed)来确定生成随机数的区间,只要种子一样,获取的随机数的序列就是一致的。而且生成的结果都是可以预测的。是一种伪随机数的实现,而不是真正的随机数。来确定使用的但是有些用例直接使用可能会导致一些意想不到的问题。Random的一个普遍用法: // Random 实例Random random = new Random();//调用 nextInt() 方法 此外还有nextDouble(), nextBoolean(), nextFloat(), ...random.nextInt();或者,我们可以使用java中的数学计算类:Math.random();Math类只包含一个Random实例来生成随机数:public static double random() { Random rnd = randomNumberGenerator; if (rnd == null) { // 返回一个新的Random实例 rnd = initRNG
  • 随机于ThreadLocalRandom(Random over ThreadLocalRandom)
    问题 java.util.Random的实例是线程安全的。 但是,跨线程并发使用同一java.util.Random实例可能会引起争用并因此导致性能下降。 考虑在多线程设计中改用ThreadLocalRandom。 什么样的争执因而表现不佳? 有人可以在这里给我解释吗? 我不知道Random和ThreadLocalRandom中使用什么算法使它们与众不同。 回答1 这可能会有所帮助: http://thoughtfuljava.blogspot.com/2012/09/prefer-threadlocalrandom-over-random.html 引用来源: 通常,要生成随机数,我们要么创建java.util.Random的实例,要么创建Math.random() -在第一次调用时在内部创建java.util.Random的实例。 但是,在并发应用程序中,上述用法会导致争用问题。 Random是线程安全的,可供多个线程使用。 但是,如果多个线程使用Random的相同实例,则多个线程共享同一种子。 它导致多个线程之间的争用,从而导致性能下降。 ThreadLocalRandom是上述问题的解决方案。 ThreadLocalRandom每个线程都有一个Random实例,可以防止争用。 因此,基本上,每个线程使用随机实例可以使您停止必须由所有线程使用的种子上的同步。 回答2
  • 040.JAVA常用类_随机数相关类
    1. 随机数相关类2. Random 类 2.1. Random 类的构造器 2.1.1. Random() 构造器2.1.2. Random(long seed) 构造器 2.2. Random 类常用方法 2.2.1. nextInt(int n) 方法 3. ThreadLocalRandom 类 3.1. ThreadLocalRandom 类新增方法 3.1.1. nextInt(int least, int bound) 方法 4. UUID 类 4.1. UUID 类中常用方法 4.1.1. randomUUID 方法 5. 使用案例-验证码生成 博主的 Github 地址 1. 随机数相关类 随机数相关类有以下三个 Random 类 (java.util)ThreadLocalRandom 类 (java.util.concurrent)UUID 类 (java.util) 2. Random 类 作用:用以生成一个伪随机数. 很多时候会发现 Math.random() 方法更易于使用. 备注: 通过相同的种子产生的随机数是相同的. 无论运行多少次, 只要种子一样, 结果都不会发生改变.如下所示: 2.1. Random 类的构造器 2.1.1. Random() 构造器 方法定义:public Random() 作用:创建一个新的随机数生成器