java时间订单号,Java订单号(时间添流水号)

Java订单号(时间加流水号)

package com.xmobo.demo;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.concurrent.TimeUnit;

public class Test01 {

public static void main(String[] args) throws InterruptedException {

SerialNumber serial = new FileEveryDaySerialNumber(5, "EveryDaySerialNumber.dat");

while (true) {

System.out.println(serial.getSerialNumber());

TimeUnit.SECONDS.sleep(2);

}

}

}

abstract class SerialNumber {

public synchronized String getSerialNumber() {

return process();

}

protected abstract String process();

}

abstract class EveryDaySerialNumber extends SerialNumber {

protected final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

protected DecimalFormat df = null;

public EveryDaySerialNumber(int width) {

if (width < 1) {

throw new IllegalArgumentException("Parameter length must be great than 1!");

}

char[] chs = new char[width];

for (int i = 0; i < width; i++) {

chs[i] = '0';

}

df = new DecimalFormat(new String(chs));

}

protected String process() {

Date date = new Date();

int n = getOrUpdateNumber(date, 1);

return format(date) + format(n);

}

protected String format(Date date) {

return sdf.format(date);

}

protected String format(int num) {

return df.format(num);

}

protected abstract int getOrUpdateNumber(Date current, int start);

}

class FileEveryDaySerialNumber extends EveryDaySerialNumber {

private File file = null;

private final static String FIELD_SEPARATOR = ",";

public FileEveryDaySerialNumber(int width, String filename) {

super(width);

file = new File(filename);

}

@Override

protected int getOrUpdateNumber(Date current, int start) {

String date = format(current);

int num = start;

if (file.exists()) {

List list = FileUtil.readList(file);

String[] data = list.get(0).split(FIELD_SEPARATOR);

if (date.equals(data[0])) {

num = Integer.parseInt(data[1]);

}

}

FileUtil.rewrite(file, date + FIELD_SEPARATOR + (num + 1));

return num;

}

}

class FileUtil {

public static void rewrite(File file, String data) {

BufferedWriter bw = null;

try {

bw = new BufferedWriter(new FileWriter(file));

bw.write(data);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (bw != null) {

try {

bw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

public static List readList(File file) {

BufferedReader br = null;

List data = new ArrayList();

try {

br = new BufferedReader(new FileReader(file));

for (String str = null; (str = br.readLine()) != null;) {

data.add(str);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (br != null) {

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return data;

}

}

注意:代码中有个叫EveryDaySerialNumber.dat,可以自行创建这样的文件,然后放到项目的根目录下就可以。此文件主要是用于记录上一次执行程序的节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中生成订单号(日期+流水号),可以使用SimpleDateFormat类和AtomicInteger类来实现。 1. 获取当前日期,可以使用SimpleDateFormat类将当前时间格式化为指定的日期格式,比如"yyyyMMdd"。 ```java SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String currentDate = dateFormat.format(new Date()); ``` 2. 生成流水号,可以使用AtomicInteger类来维护一个自增的流水号。每次生成订单号时,调用incrementAndGet()方法获取下一个流水号。 ```java AtomicInteger sequence = new AtomicInteger(0); int nextSequence = sequence.incrementAndGet(); ``` 3. 将日期和流水号拼接生成订单号。 ```java String orderNumber = currentDate + String.format("%04d", nextSequence); ``` 这里使用了String类的format()方法来保证流水号的位数,比如如果流水号是1,则格式化为"0001",如果流水号是12,则格式化为"0012"。 完整的代码如下: ```java import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.atomic.AtomicInteger; public class OrderNumberGenerator { private static AtomicInteger sequence = new AtomicInteger(0); public static String generateOrderNumber() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); String currentDate = dateFormat.format(new Date()); int nextSequence = sequence.incrementAndGet(); String orderNumber = currentDate + String.format("%04d", nextSequence); return orderNumber; } public static void main(String[] args) { String orderNumber = generateOrderNumber(); System.out.println(orderNumber); } } ``` 每次调用generateOrderNumber()方法可以生成一个新的订单号,格式为"yyyyMMdd0001"、"yyyyMMdd0002"等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值