Java 学习 UUID 与 时间格式化、时间操作


UUID :

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司全局唯一标识符GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。

String uuid1 = UUID.randomUUID().toString();//生成UUID
Log.e(TAG, "uuid1 默认的uuid: "+uuid1);
String uuid2 = UUID.randomUUID().toString().replace("-","");//格式化UUID将“-”去掉
Log.e(TAG, "uuid2 将“-”去掉: "+uuid2);
String uuid3 = UUID.randomUUID().toString().replace("-",".");//格式UUID将“-”格式成“.”
Log.e(TAG, "uuid3 将“-”格式成“.”: "+uuid3);
String uuid4 = UUID.randomUUID().toString().concat(".apk");//格式UUID,在UUID的结尾添加.apk
Log.e(TAG, "uuid4 结尾添加.apk: "+uuid4);
String uuid5 = UUID.randomUUID().toString().replaceAll("\\d","");//替换所有,参数1为要替换的字符正则表达式,参数2为替换字符;
Log.e(TAG, "uuid5 去掉所有数字: "+uuid5);

UUID newuuid = UUID.fromString(uuid1);//将String类型 转成 UUID
UUID u1 = UUID.randomUUID();
UUID u2 = UUID.randomUUID();
int values = u1.compareTo(u2);  // -1=小于  0=等于  1=大于
Log.e(TAG, "u1 对比 u2: "+values);//注意UUID对比 不会根据生成时间就比较大,它只是简单的比较字符大小

结果:

 E/DemoActivity: uuid1 默认的uuid: 02f33031-dbb6-465f-9645-11388b3f08c6
 E/DemoActivity: uuid2 将“-”去掉: f7b60f9a76954939afd773c158527b99
 E/DemoActivity: uuid3 将“-”格式成“.”: 2c5c2843.a122.465b.bb23.963221fb32ed
 E/DemoActivity: uuid4 结尾添加.apk: f466f910-0ed9-4a26-8532-bee14272136f.apk
 E/DemoActivity: uuid5 去掉所有数字: fdb-ca-d-b-cfaee
 E/DemoActivity: u1 对比 u2: -1

 


 

Time:

获取当前时间

方式一:

Date date = new Date();
Log.e(TAG, "当前时间="+date);

结果:

E/TimeActivity: 当前时间=Wed Sep 12 07:03:25 GMT+00:00 2018

方式二:

long date = System.currentTimeMillis(); //获得系统时间,得到是从1970年到现在的毫秒级long值
Log.e(TAG, "毫秒级time值=:"+date);

 结果:

E/TimeActivity: 毫秒级time值=:1536736055737

 方法三:

Calendar calendar = Calendar.getInstance();
calendar.getTimeInMillis();

获取设备开机至此时的相对时间:

long time = SystemClock.elapsedRealtime();

格式化时间

格式化字母表

SymbolMeaningPresentationExample
Gera designator 时代TextAD
yyear   Number2009
Mmonth in year  Text & NumberJuly & 07
dday in month  Number10
hhour in am/pm (1-12) 12小时制的时Number12
Hhour in day (0-23)  24小时制的时Number0
mminute in hour   分钟Number30
ssecond in minute Number55
Smillisecond 毫秒Number978
Eday in week 星期TextTuesday
Dday in year  一年中的第几天Number189
Fday of week in month  一个月中的第几周的星期几Number2 (2nd Wed in July)
wweek in year  一年中的第几周Number27
Wweek in month 一月中的第几周Number2
aam/pm marker  上午/下午TextPM
khour in day (1-24)   一天中的第几个小时Number24
Khour in am/pm (0-11) Number0
ztime zone 时区TextPacific Standard Time
'escape for textDelimiter(none)
'single quoteLiteral'

 格式化出全部的时间:

long time = System.currentTimeMillis();
//格式化 日-月(3个M等于文本形式的月份)-年  小时:分钟:秒:毫秒
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:SSS");
String timeText = formatter.format(time);
Log.e(TAG, "格式化后time值=:"+timeText);

结果:

E/TimeActivity: 格式化后time值=:12-Sep-2018 07:22:38:596

只格式化时-分-秒-毫秒:

SimpleDateFormat formatter = new SimpleDateFormat("HH-mm-ss-SSS");//分隔符是可以自己设定的
Log.e(TAG, "格式化后time值=:"+formatter.format(System.currentTimeMillis()));

结果:

E/TimeActivity: 格式化后time值=:07-29-18-317

格式化一个月中第几周:

SimpleDateFormat formatter = new SimpleDateFormat("M-W");//月份-月份中的第几周
//如果是"MM-WW" 则可以格式化出 09-03
Log.e(TAG, "格式化后time值=:"+formatter.format(System.currentTimeMillis()));

结果:

E/TimeActivity: 格式化后time值=:9-3

使用Calendar 历法类设置时间

例一:

                mFormat = new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss");
                Calendar calendar = Calendar.getInstance();//得到单例
                calendar.set(Calendar.YEAR,2018);//
                calendar.set(Calendar.MONTH,8);//月 注意月份是从0开始计算的,所以这里的8,在格式化后等于9
                calendar.set(Calendar.DAY_OF_MONTH,12);//
                calendar.set(Calendar.HOUR_OF_DAY,15);// HOUR_OF_DAY 24小时制的时
                calendar.set(Calendar.MINUTE,52);//
                calendar.set(Calendar.SECOND,20);//
                Log.e(TAG, "未格式化毫秒级time="+calendar.getTimeInMillis());
                Log.e(TAG, "手动格式化time="+mFormat.format(calendar.getTimeInMillis()));
                Log.e(TAG, "系统自带格式化time="+calendar.getTime());

效果:

 E/TimeActivity: 未格式化毫秒级time=1536767540133
 E/TimeActivity: 手动格式化time=2018-09-12:15-52-20
 E/TimeActivity: 系统自带格式化time=Wed Sep 12 15:52:20 GMT+00:00 2018

例二:

calendar.set(2017,9,13,14,24,30);
Log.e(TAG, "另一种方式输入方式time="+mFormat.format(calendar.getTimeInMillis()));

效果 :

E/TimeActivity: 另一种方式输入方式time=2017-10-13:14-24-30

例三:

                calendar.set(Calendar.AM_PM,0);// 0=上午  1=下午
                calendar.set(Calendar.HOUR,6);//12小时值
                Log.e(TAG, "上午time="+mFormat.format(calendar.getTimeInMillis()));
                calendar.set(Calendar.AM_PM,1);
                calendar.set(Calendar.HOUR,7);
                Log.e(TAG, "下午time="+mFormat.format(calendar.getTimeInMillis()));

效果:

 E/TimeActivity: 上午time=2017-10-13:06-24-30
 E/TimeActivity: 下午time=2017-10-13:19-24-30

 

使用Calendar向上或向下跳转年/月/日/时/分/秒

日期的切换还相当简单只需要当前时间戳减去24小时时间戳,年份或月份的切换是需要相当复杂的计算的,需要计算大小月/平润年.好在Calendar类已经帮我们实现了这个方法

add()方法:

  说明一下add()方法,使用add()方法切换时间,会影响到其他区域的时间(增加减少日期的同时会改变月份或者年份),例如:2018-11-31(这里是11等于12),我们切换增加一天时间就会变成2019-0-1

     Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR,-1);//减少一年
        calendar.add(Calendar.YEAR,1);//增加一年
        calendar.add(Calendar.MONTH,-1);//减少一个月
        calendar.add(Calendar.MONTH,1);//增加一个月
        calendar.add(Calendar.DAY_OF_MONTH,-1);//减少一天
        calendar.add(Calendar.DAY_OF_MONTH,1);//增加一天

roll()方法:

    roll()方法正好与add()相反,使用roll()方法切换时间,不会影响到其他区域的时间,例如:2018-11-31,我们切换增加一天时间就会变成2018-11-1

        Calendar calendar = Calendar.getInstance();
        calendar.roll(Calendar.YEAR,-1);//减少一年
        calendar.roll(Calendar.YEAR,1);//增加一年
        calendar.roll(Calendar.MONTH,-1);//减少一个月
        calendar.roll(Calendar.MONTH,1);//增加一个月
        calendar.roll(Calendar.DAY_OF_MONTH,-2);//减少2天
        calendar.roll(Calendar.DAY_OF_MONTH,2);//增加2天
        //当然也可以使用布尔值
        calendar.roll(Calendar.YEAR,true);//减少一年
        calendar.roll(Calendar.YEAR,false);//增加一年
        calendar.roll(Calendar.MONTH,true);//减少一个月
        calendar.roll(Calendar.MONTH,false);//增加一个月
        calendar.roll(Calendar.DAY_OF_MONTH,true);//减少一天
        calendar.roll(Calendar.DAY_OF_MONTH,false);//增加一天 

使用Calendar得到时间

Calendar cal = Calendar.getInstance();
                //当前年
                int year = cal.get(Calendar.YEAR);
                Log.e(TAG, "当前年:"+year);
                //当前月
                int month = (cal.get(Calendar.MONTH))+1;
                Log.e(TAG, "当前月:"+month);
                //当前月的第几天:即当前日
                int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
                Log.e(TAG, "当前月:"+day_of_month);
                //当前时:HOUR_OF_DAY-24小时制;HOUR-12小时制
                int hour = cal.get(Calendar.HOUR_OF_DAY);
                Log.e(TAG, "当前时:"+hour);
                //当前分
                int minute = cal.get(Calendar.MINUTE);
                Log.e(TAG, "当前分:"+minute);
                //当前秒
                int second = cal.get(Calendar.SECOND);
                Log.e(TAG, "当前秒:"+second);
                //当前毫秒
       int millisecond = calendar.get(Calendar.MILLISECOND);
                Log.e(TAG, "当前毫秒:"+millisecond);
                //0-上午;1-下午
                int ampm = cal.get(Calendar.AM_PM);
                Log.e(TAG, "上午/下午:"+ampm);
                //当前年的第几周
                int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
                Log.e(TAG, "当前年的第几周:"+week_of_year);
                //当前月的第几周
                int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);
                Log.e(TAG, "当前月的第几周:"+week_of_month);
                //当前年的第几天
                int day_of_year = cal.get(Calendar.DAY_OF_YEAR);
                Log.e(TAG, "当前年的第几天:"+day_of_year);        

另外解释为什么int month = (cal.get(Calendar.MONTH))+1; 需要加+1,因为这个获取的月份值是从0开始的

注意!如果你发现你获取的年份、月份、日期、小时等等不准确时请确定你的时区是否设置正确。

posted on 2018-08-16 14:57  观心静 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/guanxinjing/p/9708584.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值