private static long n = 1
public static void main(String[] args) {
System.out.println(test(n))
System.out.println(test(n))
}
public static long test(long l) {
String str = new SimpleDateFormat("yyyyMM")
.format(new java.util.Date())
long m = Long.parseLong((str)) * 10000
long ret = m + l
n = l + 1
return ret
}
}
比如你把你的数据都存在数据库里。把你们这字符串分为两部分,前面取系统日期(在数据库中的字段为date),后面做一个整型变量(times)。
然后系统日期取出来后,搜索数据库date字段,如果找到了相同相同日期的数据了,就取times字段里最高的数据然后自动加1,如果没找到相同的date字段,就设置为001。
显示输出的时候只要把两个字段的数据转为字符串,整理合并下就可以了。
private string GenerateStr()
{
//获取当前序列号,此处我存储在了配置文件中,实际应用中应该写入数据库或者文本文件中
var currentNumber = ConfigurationManager.AppSettings["number"]
if (string.IsNullOrEmpty(currentNumber))//为空,根据当前年月生成一个
{
var yearMonth = DateTime.Now.Date.ToString("yyyyMM")
var number = yearMonth + "0001"
ConfigurationManager.AppSettings["number"] = number
return number
}
//不为空的话截取年月部分与当前年月比较
var yearMonthPart = currentNumber.Substring(0, 6)
var dtNow = DateTime.Now.Date.ToString("yyyyMM")
if (!yearMonthPart.Equals(dtNow))//如果年月不相同,重新生成
{
var number = dtNow + "0001"
ConfigurationManager.AppSettings["number"] = number
return number
}
//若年月相同,则根据后面四位序列号+1生成新的序列号
var num = currentNumber.Substring(6, currentNumber.Length - 6)
var nextNum = GetIndex(num)
var result = yearMonthPart + nextNum
ConfigurationManager.AppSettings["number"] = result
return result
}
private string GetIndex(string num)
{
var nextNum = ""
for (int i = 0i <num.Lengthi++)
{
if (num[i] != '0')
{
var number = num.Substring(i, num.Length - i)
nextNum = (int.Parse(number) + 1).ToString()
var zeroLength = num.Length - nextNum.Length
for (int j = 0j <zeroLengthj++)
{
nextNum = "0" + nextNum
}
return nextNum
}
}
return nextNum
}
测试成功,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)