天道酬勤,学无止境

java:随机时间生成器(java: Random Time generator)

问题

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

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

回答3

在,java1.8

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

回答4

使用 Random Generator 就像这里的 RandomUtil 类一样,您可以在某些值之间创建随机日期等等。

使用此类的代码示例:

如果您需要从现有日期更新时间,您可以使用这样的代码。 只需用数据库中的日期替换 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
回答6

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

受限制的 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中生成随机时间戳?(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 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随机数/ 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 随机数 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
  • 产生随机的出生日期(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中的真正随机生成(True random generation in Java)
    问题 我正在阅读Math.random()Javadoc,发现random只是psuedorandom。 是否有一个库(特别是java)根据随机变量(例如环境温度,CPU温度/电压等)生成随机数? 回答1 查看http://random.org/ RANDOM.ORG是一种真正的随机数服务,可通过大气噪​​声生成随机性。 可以在以下位置找到用于与其连接的Java库:http://sourceforge.net/projects/trng-random-org/ 回答2 您的问题模棱两可,导致答案无处不在。 如果您正在寻找依赖于系统随机性源的Random实现(正如我猜的那样),那么java.security.SecureRandom会做到这一点。 java.security文件中Sun安全提供程序的默认配置如下: # # Select the source of seed data for SecureRandom. By default an # attempt is made to use the entropy gathering device specified by # the securerandom.source property. If an exception occurs when # accessing the URL then the traditional
  • 随机数生成器-为什么每次都播种(Random number generator - why seed every time)
    问题 我是C和C ++的新手。 在Java(我用来编程的语言)中,它非常容易实现随机数生成。 只需从名为Math的类中调用静态随机方法即可。 int face = ((int)(Math.random() * 6) + 1); 模拟掷骰子... 在c和c ++中,您必须通过调用srand函数来“种子随机数生成器” srand ( time(NULL) ); 这样做有什么意义-我的意思是每次运行代码时都必须为随机数生成器提供种子有什么好处? 回答1 给定相同的种子,伪随机数生成器每次都会产生相同的序列。 因此,这取决于您是否每次运行都需要不同的伪随机数序列。 这真的取决于您的需求。 有时您想重复一个序列。 而当你不这样做的时候。 您需要了解每个特定应用程序的需求。 永远不要做的一件事是在生成单个序列期间重复进行种子。 这样做很可能会破坏序列的分布。 回答2 通常称为随机数生成器的实际上是伪随机数生成器。 这通常意味着,如果您为该序列提供“密钥”(称为“种子”),则可以生成相同的随机序列。 当您希望测试基于随机化的算法并且需要确保可重复的结果时,这非常有用。 如果您不“播种”您的随机数生成器,则默认情况下会使用一些(通常基于系统时间)随机数作为种子,因此每次您运行程序时都会生成不同的序列。 回答3 如果不为生成器提供种子,则每次运行程序时,它都将具有相同的种子
  • 如何在C中生成随机整数?(How to generate a random int in C?)
    问题 是否有函数在C中生成一个随机的int数? 还是我必须使用第三方库? 回答1 注意:不要为了安全起见使用rand() 。 如果您需要一个密码安全的号码,请参阅此答案。 #include <time.h> #include <stdlib.h> srand(time(NULL)); // Initialization, should only be called once. int r = rand(); // Returns a pseudo-random integer between 0 and RAND_MAX. 在Linux上,您可能更喜欢使用随机和随机方式。 回答2 <stdlib.h>的rand()函数返回介于0和RAND_MAX之间的伪随机整数。 您可以使用srand(unsigned int seed)设置种子。 通常将%运算符与rand()结合使用以获取不同的范围(尽管请记住,这会在一定程度上降低一致性)。 例如: /* random int between 0 and 19 */ int r = rand() % 20; 如果您真正在乎均匀性,则可以执行以下操作: /* Returns an integer in the range [0, n). * * Uses rand(), and so is affected-by/affects the same
  • 不同语言(例如Java和C ++)的“随机”生成器如何比较?(How do the “random” generators in different languages (i.e. Java and C++) compare?)
    问题 尽管标题很奇怪,但我还是想问一个合理的问题:哪种方法生成的数字更随机:Java的Random()类或Math.random()或C ++的rand() ? 我听说PHP的rand()相当糟糕,即,如果您映射其结果,则可以清楚地看到一个模式。 可悲的是,我不知道如何用C ++或Java绘制地图。 另外,出于兴趣,C#呢? 回答1 Java和C ++都生成伪随机数,它们是: 对于不是统计学家或密码学家的人而言,足以胜任该任务(a) ; 或者严重不足以适应这两类人。 老实说,除非您属于这些类别之一,否则伪随机数生成器就可以了。 Java还具有SecureRandom ,旨在提供加密类的非确定性(我无法评论该论点的准确性),并且C ++现在具有比rand()更为广泛的随机数生成功能-请参见<random>有关详细信息。 特定的操作系统可能为随机数生成器提供熵的来源,例如Windows下的CryptGenRandom或Linux下的/dev/random 。 或者,您可以通过使用随机事件(例如用户输入时间)来添加熵。 (a)可能实际上包含不是统计学家或密码学家的其他工作类型的痕迹:-) 回答2 java.util.Random (由Math.random()内部使用)使用线性同余生成器,它是一个相当弱的RNG,但足以满足简单的需求。 对于重要的应用程序,应改为使用java
  • 为什么使用随机字符串的此代码会打印“ 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
  • 如何处理缓慢的SecureRandom生成器?(How to deal with a slow SecureRandom generator?)
    问题 如果要用Java SecureRandom加密强度高的随机数,请使用SecureRandom 。 不幸的是, SecureRandom可能非常慢。 如果在Linux上使用/dev/random ,则它可以阻止等待足够的熵建立。 您如何避免性能下降? 有没有人使用“罕见数学”作为该问题的解决方案? 任何人都可以确认在JDK 6中已经解决了此性能问题吗? 回答1 如果您想要真正的随机数据,那么不幸的是您必须等待它。 这包括SecureRandom PRNG的种子。 罕见的数学无法以比SecureRandom更快的速度收集真正的随机数据,尽管它可以连接到互联网以从特定网站下载种子数据。 我的猜测是,这不可能比可用的/dev/random更快。 如果您想要PRNG,请执行以下操作: SecureRandom.getInstance("SHA1PRNG"); 支持哪些字符串取决于SecureRandom SPI提供程序,但是您可以使用Security.getProviders()和Provider.getService()枚举它们。 Sun喜欢SHA1PRNG,因此可以广泛使用。 随着PRNG的发展,它并不是特别快,但是PRNG只是计算数字,不会阻碍对熵的物理测量。 唯一的例外是,如果您在获取数据之前未调用setSeed() ,则PRNG将在您第一次调用next()或nextBytes
  • 随机数生成器的实现[重复](Implementation of random number generator [duplicate])
    问题 这个问题在这里已经有了答案: 8 年前关闭。 可能的重复: 随机数生成器是如何工作的? 我正在寻找 C/C++ 中随机数生成器的内部实现。基本上我很想知道,当 rand() 被调用时到底发生了什么。 毕竟机器都遵循一定的指令,怎么可能是随机的! 编辑:想知道如何在 C/C++ 中实现一个。 回答1 它们是伪随机数生成器,而不是真正的随机数生成器。 这通常是一件好事,因为它允许您在涉及“随机”数字的情况下更轻松地重现错误。 你可以得到随机数生成器,比如阅读/dev/random Linux下,但正常的那些船以C一般库不是。 最简单的是线性同余生成器,其中: n(x+1) = n(x) * A + C modulo M with suitably chosen values of A , C and M . 维基百科关于 LCG 的页面提供了一些用于各种实现的示例值。 例如,那里列出的glibc有a = 1103515245, c = 12345, m = 2^31所以它很简单,比如: static unsigned int seed = 1; void srand (int newseed) { seed = (unsigned)newseed & 0x7fffffffU; } int rand (void) { seed = (seed * 1103515245U +
  • 使用 GMP 在 C++ 中生成随机数(Random number generation in c++ using GMP)
    问题 在java中随机数可以得到像 protected final static Random RANDOM = new Random(System.currentTimeMillis()); 在 C++ 中使用 GMP 库如何生成随机数? 我使用了类似的代码 gmp_randstate_t s; unsigned long seed; seed = time(NULL); gmp_randinit_default(s); gmp_randseed_ui(s, seed); mpz_class ran; gmp_randclass rr(s); ran =rr.get_z_bits(125); long int random=ran.get_ui(); 但我没有得到随机数。 请帮我。 回答1 首先,没有采用gmp_randstate实例的gmp_randclass构造函数,所以你的代码没有为我编译。 构造 gmp_randclass 实例的推荐方法是使用gmp_randinit_default ,如下所示: gmp_randclass rr(gmp_randinit_default); 您的代码的第一部分是播种gmp_randstate_t s ,但是在您的代码的第二部分(在上述更改之后)中没有使用该随机状态变量s 。 除非另外播种,否则默认的 GMP
  • 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
  • 随机生成器每次都给我相同的数字(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
  • 【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
  • 随机于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
  • java生成图形验证码(算数运算图形验证码 + 随机字符图形验证码)
    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我。 跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~ 生成图形验证码(算数运算图形验证码 + 随机字符图形验证码) 1 场景 在用户登录、忘记密码、用户注册、修改用户信息....等场景需要对用户进行图形化验证。防止别有用心的人或机器通过接口来进行攻击或恶意操作。 本示例讲解通过java生成两种图形验证码:算数运算的图形验证码和定长随机字符图形验证码! 2 编写代码 2.1 创建生成指定长度的随机字符串工具类 创建生成指定长度的随机字符串工具类:RandomCodeUtil.java,该工具类在之前的博客中讲到过。 import java.util.Random; /** * 生成指定长度的随机字符串 */ public class RandomCodeUtil { /** * 生成指定长度的随机字符串(不包含数字0,和字母l、o和i) * * @param capacity 验证码长度 */ public static String genCode(Integer capacity) { //随机字符集(不包含数字0和字母o、i和l) String str =
  • 有效地选择随机数(Choosing random numbers efficiently)
    问题 我有一种方法,它使用随机样本来近似计算。 这种方法被称为数百万次,因此,选择随机数的过程必须高效,这一点非常重要。 我不确定javas Random().nextInt到底有多快,但是我的程序似乎并没有像我期望的那样受益。 选择随机数时,我将执行以下操作(半伪代码): // Repeat this 300000 times Set set = new Set(); while(set.length != 5) set.add(randomNumber(MIN,MAX)); 现在,这显然具有最坏的最坏情况下的运行时间,因为理论上随机函数可以为永恒添加重复的数字,从而永远停留在while循环中。 但是,数字是从{0..45}中选择的,因此重复的值在大多数情况下是不太可能的。 当我使用上述方法时,其速度仅比我的其他方法快40%,该方法虽然不近似,但可以得出正确的结果。 该方法运行了大约一百万次,因此我期望这种新方法至少快50%。 您对更快的方法有什么建议吗? 或者,也许您知道一种生成一组随机数的更有效方法。 为了澄清,这是两种方法: // Run through all combinations (1 million). This takes 5 seconds for(int c1 = 0; c1 < deck.length; c1++){ for(int c2 = c1+1
  • 如何在Java中生成6个不同的随机数(How to generate 6 different random numbers in java)
    问题 我想通过使用Math.random生成6个不同的随机数,并将它们存储到数组中。 我如何确保它们不同? 我知道我需要使用for循环来检查数组,但是如何... 这是范围。 我只需要1到49之间的数字。(1 +(int)(Math.random()* 49)) 回答1 在Java 8中: final int[] ints = new Random().ints(1, 50).distinct().limit(6).toArray(); 在Java 7中: public static void main(final String[] args) throws Exception { final Random random = new Random(); final Set<Integer> intSet = new HashSet<>(); while (intSet.size() < 6) { intSet.add(random.nextInt(49) + 1); } final int[] ints = new int[intSet.size()]; final Iterator<Integer> iter = intSet.iterator(); for (int i = 0; iter.hasNext(); ++i) { ints[i] = iter.next(); }