全部 文章 问答 分享 共找到455个相关内容
[问答] Android本地音频加载
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI使用这个URI加载本地音频没错,但加载的本地音频只有两首。我自己看有很多,为什么它不能找到呢?
2020-05-26 16:10 · Android本地音频
[问答] 使用MediaPlayer播放音频

实现顺序播放音频,开始播放了之后,界面就卡住了(久了之后就会提示:应用没有响应,是否关闭),只有音频在不停地播放



2021-06-05 15:44
                ·
                音频 / MediaPlayer
[问答] 请教下怎么播放这种的pcm音频
audioTrack来进行播放

C++层通过aar提供了回调方法给我大概如下,通过了通道和还有码流等,但是我播出来的就是有噪音,不知道是不是我的用法有个问题,decodeFrame.data是音频

2022-08-01 16:48 · android / audio / audiotrack
[问答] 喜马拉雅无法播放音频问题
权限已设置,代码运行不报错,我感觉是播放数据没设置过去,或者获取音频的网址没有加入网络安全配置文件,就像之前获取数据和专辑图的图片都要分开加入进去,想跳转过去时看是否有数据,但是不知道怎么调试。
2020-05-20 13:19 · 播放器
[问答] android开发喜马拉雅FM电台,所有音频点击播放没有反应
在B站看到作者大大的项目,准备动手尝试,运行源码时,发现点击音频播放按钮时,没有反应,不会播放。想问一下,这是哪方面的原因,我是一个软件工程专业的学生,希望得到作者大大的回答。感谢!
2020-11-12 13:33 · Android
[文章] 常见ffmpeg,却不知道ffmpeg为何物
什么是ffmpegFFmpeg是一款强大的开源跨平台音视频处理工具集,它能够完成录制、转换、流化以及复用/解复用等多种音频和视频相关的任务。
2024-03-21 10:21 · ffmpeg / 音频处理 / 视频处理 / 编码 / 解码
[问答] 关于base64编码的小问题
问个问题,音频文件跟图像文件的base64编码方法一样吗,还是说音频和图片的base64不是同一个编码方法
2020-05-03 22:43 · base64编码
[文章] JavaWeb博客系统后端-统一异常处理
JavaWeb博客系统后端-统一异常处理经过测试的网站,一般会比较少异常。同常来说,我们在使用已经上线的网站时是比较少发现异常的。那如果有异常,怎么处理呢?直接告诉用户服务器异常吗?服务器崩溃吗?
2020-02-01 20:29 · 异常处理 / JavaWeb / 博客系统 / 异常 / 后台
[文章] Android的ARM微处理的寄存器组织
ARMARM处理器是一种32位嵌入式RISC处理器。RISC的英文全称是ReducedInstructionSetComputer,中文是精简指令集计算机。
2020-03-21 15:48 · Android / ARm
[文章] 3、Android开发Jetpack-Databinding事件处理
Android开发Jetpack-Databinding事件处理事件处理主要有两种一种是方法引用,另外一种则是监听绑定官方的说法叫做:Methodreferences和Listenerbindings这两种方式的不同是什么呢
2020-11-16 12:19 · 安卓开发 / Databinding / MVVM / jetpack / 数据绑定
[问答] 微服务 怎么在服务拿到服务A处理过的异常信息
项目A的服务注册到eureka并在所有项目的公共模块使用@ControllerAdvice来进行统一异常处理,项目B调用A服务,拿不到处理过的异常信息,显示空白,怎么处理呀.A服务B服务
2021-03-21 16:24 · 微服务 / 学习
[文章] 喜马拉雅app改进
项目的github地址一个具备远程访问功能的音频分享软件,软件应具备在线听歌,在线听故事,在线分享等功能的音频分享appDailyListen项目简介整个项目分为7个模块:用户模块、订阅模块,推荐模块,
2020-05-30 11:14 · 喜马拉雅app / 改进
[文章] 10、Android开发基础-点击事件的处理
Android开发基础之点击事件的处理对于安卓初学者来说!
[问答] 阳光沙滩APP 如何处理返回结果?
大家平时是怎么处理这种情况的?

做一个BaseResponse 吗?

2022-03-20 11:31 · Android
[文章] 【NLP】TorchText介绍与(搜狗语料)文本语料处理案例
在pytorch中众所周知的数据处理包是处理图片的torchvision,而处理文本的少有提及,快速处理文本数据的包也是有的,那就是torchtext。
2021-03-21 22:16 · NLP / torchtext
[文章] vue.js国际化处理
vue.js国际化处理关于国际化vue-i18n安装配置vue-i18n的使用路由里的菜单如何实现国际化切换语言关于国际化目前我要做的是两套,中文和英文。
2022-08-24 10:57 · vue.js / i18n / 国际化 / 多语言 / 本地化
[问答] 模拟器播放存储卡中的音乐问题
不管我是静态注册权限还是动态申请权限我的模拟器sd卡上的音频文件就是读取不到??有谁遇到过这个坑么
2020-11-29 17:42 · as
[问答] 问问各位大佬,是关于okhttp的问题
上传个音频文件,服务器那边要求是application/octet-stream然后请求头里面包含了json,请问要怎么样才能让请求头包含json呢(post上传)附个接口文档:https://aidoc.jd.com
2020-04-29 23:30 · okhttp
[问答] RecyclerView嵌套ViewPager2,点击事件的具体处理逻辑写在哪里比较好
里层的ViewPager2Item的点击事件的具体处理逻辑通过自定义点击监听器传到RecyclerView的Adapter的onBindViewHolder(),我目前的水平只能理解到这里了,甚至这样做的目的到底是啥都不知道
2021-04-15 00:39 · Android
[问答] 使用Retrofit,如何处理服务器返回的Json字符串(不是Json数据)?
今天我使用Retrofit去请求一个服务器接口数据,按照流程去创建实体类、接口方法,然后在enqueue()方法中处理结果,但始终没有结果返回,也没有异常抛出,也没报错。
2021-03-09 13:27 · Android / Retrofit / Json
[问答] android音视频(扬声器输出声音与屏幕)如何合并同步推流udp,音视频开发
(不合并MP4),使用MediaRecorder不能获取到系统声音,MediaMuxer只能合并成MP4,是否有其他方法能够合并音频与视频并推流 合并成h264或者ts或其他?
2023-02-27 14:54 · android / 音视频开发 / Media
[文章] Volley/Xutils对大图片处理算法源码分析
Volley/Xutils对大图片处理算法源码分析图片处理算法源码分析这几個开源框架,都可以对图片进行请求加载,那么它们又是怎么样处理大图片的呢?在大图片的面前,它们到底怎么防止OOM的呢?
2019-12-01 20:01 · 源码分析 / 源码 / android / xutils / volley
[问答] android中如何监听webView中音视频的播放状态?
在android中使用webView去加载后台富文本框数据,其中包含音频、视频。请问能否监听或者获取webView中音视频的播放状态?
2021-01-15 16:52 · android / webView
[文章] 被公司试用总结(咸鱼大杂烩)
AudioManager.FLAG_ACTIVE_MEDIA_ONLY指示仅当媒体正在活动播放时才应处理此问题。
2023-08-27 11:04 · android / Tv / hidl / framework
[问答] app服务器端开发用java好还是php好?
3,应用功能:保存文字、图片、音频到云存储。查询了很多,有很多说要用java来写会稍微复杂一点,但效率高,用php写也可以但性能没有Java好。
2019-11-27 20:49 · app服务端
[问答] 数据请求多个状态结果的处理,放在activity 中 该怎么处理
各位大佬,领券联盟课程里多状态请求是放在frament里面的那么在activity可以套用这种办法吗?我在activity里面没有inflater,container这该咋办?activity里是setContentView()谢谢fragment里面的方法publicenumState{NONE,LOADING,SUCCESS,ERROR,EMPTY}rootView=inflater.inflate(R.layout.fragment_settle_base,container,false);baseContainer=rootView.findViewById(R.id.base_container);loadStateView(inflater,container);privatevoidloadStateView(LayoutInflaterinflater,ViewGroupcontainer){//请求成功的页面successView=loadSuccessView(inflater,container);baseContainer.addView(successView);//加载中的页面loadingView=loadLoadingView(inflater,container);baseContainer.addView(loadingView);//错误的页面errorView=loadErrorView(inflater,container);baseContainer.addView(errorView);//请求为空的页面emptyView=loadEmptyView(inflater,container);baseContainer.addView(emptyView);setUpState(State.NONE);}publicvoidsetUpState(Statestate){Log.d(TAG,"setUpState:当前的state"+state);this.currentState=state;successView.setVisibility(currentState==State.SUCCESS?View.VISIBLE:View.GONE);loadingView.setVisibility(currentState==State.LOADING?View.VISIBLE:View.GONE);errorView.setVisibility(currentState==State.ERROR?View.VISIBLE:View.GONE);emptyView.setVisibility(currentState==State.EMPTY?View.VISIBLE:View.GONE);}
2020-05-30 16:39 · 安卓
[问答] 在2020安卓自定义控件基础课程第34集,视频中没处理padding,加上后省略号不见了
在【阳光沙滩】2020安卓开发自定义控件基础课程,自定义控件基础课程第34集,处理padding引发的问题。
2020-09-02 02:31 · Android
[文章] SpringBoot配置文件加密处理
当我们使用一些第三方SDK或服务时,一般需要配置如密钥、授权码、AID等隐私信息,此外大多数人都有代码提交仓库的好习惯【是吧?】有时候会因为一些失误操作而将自己的隐私数据发布到gitee\github上,就完球了。我最近看了些博客,尝试了下使用Jasypt来保证配置文件的安全性首先导入maven包这里使用的新版3.0.4<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>编写一个自己使用的加密解密的小工具packagecom.lyne.moyu.uc.utils;importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.SimpleStringPBEConfig;/***Keafmd**@ClassName:JasyptUtils*@Description:*@date:2022-04-2511:18*/publicclassJasyptUtils{/***Jasypt生成加密结果**@parampassword配置文件中设定的加密密码jasypt.encryptor.password*@paramvalue待加密值*@return*/publicstaticStringencryptPwd(Stringpassword,Stringvalue){PooledPBEStringEncryptorencryptOr=newPooledPBEStringEncryptor();encryptOr.setConfig(cryptOr(password));Stringresult=encryptOr.encrypt(value);returnresult;}/***解密**@parampassword配置文件中设定的加密密码jasypt.encryptor.password*@paramvalue待解密密文*@return*/publicstaticStringdecyptPwd(Stringpassword,Stringvalue){PooledPBEStringEncryptorencryptOr=newPooledPBEStringEncryptor();encryptOr.setConfig(cryptOr(password));Stringresult=encryptOr.decrypt(value);returnresult;}/***@parampasswordsalt*@return*/publicstaticSimpleStringPBEConfigcryptOr(Stringpassword){SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();config.setPassword(password);//3.0.4版自动解密默认加密算法是PBEWITHHMACSHA512ANDAES_256,//1.8及以下版本可能需要自己替换安全文件,也可以在配置实体时修改config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");config.setKeyObtentionIterations("1000");config.setPoolSize("1");config.setProviderName("SunJCE");config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");config.setStringOutputType("base64");returnconfig;}publicstaticvoidmain(String[]args){//加密//盐值替换成自己熟悉的口令,此口令为解密密钥,需要妥善保管。//盐值也需要在第三步写入配置文件System.out.println(encryptPwd("yoursalt","123456"));}}使用加密的后的密文在配置文件中使用EMC()函数和生成的密文替换你的敏感数据,,同时声明你的jasypt密钥这里演示mysql的密码spring:application:name:u-centerprofiles:active:devjackson:date-format:yyyy-MM-ddHH:mm:sstime-zone:GMT+8mvc:throw-exception-if-no-handler-found:truestatic-path-pattern:/**web:resources:add-mappings:falsedatasource:url:jdbc:mysql://localhost:3306/mo_yu_ucenter?userUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=truedriver-class-name:com.mysql.cj.jdbc.Drivertype:com.alibaba.druid.pool.DruidDataSourceusername:rootpassword:ENC(lG4hT3FdNsFdWPmUCob7D4YUHZqyaSXEH/uYzfAWh58lSVwBz6wLd02jSgXbNHzH)jasypt:encryptor:password:yoursalt##优化加密密钥在配置文件中声明加密密码等于脱裤子放屁,这样之前的操作等于没做我的思路的是将jasypt密码存放在一个新的配置文件中,在你提交到仓库时将该文件忽略或删除,以保证密码本地可知。在资源目录下创建一个配置文件来存放密码jasypt.propertiesjasypt.password=yoursalt创建一个配置实体来读取配置文件/***@authorlyne*@date2022/11/28*/@Component@PropertySource("classpath:jasypt.properties")@ConfigurationProperties(prefix="jasypt")publicclassJasyptProperties{privateStringpassword;publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}}重写jasyptStringEncryptor/***@authorlyne*@date2022/11/28*/@ConfigurationpublicclassJasyptConfig{@AutowiredprivateJasyptPropertiesmyJasyptProperties;@Bean("jasyptStringEncryptor")publicStringEncryptorjasyptStringEncryptor(Singleton<JasyptEncryptorConfigurationProperties>configProps){PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();JasyptEncryptorConfigurationPropertiesjasyptProperties=configProps.get();SimpleStringPBEConfigconfig=newSimpleStringPBEConfig();config.setPassword(myJasyptProperties.getPassword());config.setAlgorithm(jasyptProperties.getAlgorithm());config.setKeyObtentionIterations(jasyptProperties.getKeyObtentionIterations());config.setPoolSize(jasyptProperties.getPoolSize());config.setProviderName(jasyptProperties.getProviderName());config.setSaltGeneratorClassName(jasyptProperties.getSaltGeneratorClassname());config.setIvGeneratorClassName(jasyptProperties.getIvGeneratorClassname());config.setStringOutputType(jasyptProperties.getStringOutputType());encryptor.setConfig(config);returnencryptor;}}修改.gitignore.DS_Storematerial-ui/node_modules/distlogs#Compiledclassfile*.classtarget/test/test#Logfile*.log#localenvfiles.env.local.env.*.local#Logfilesnpm-debug.log*yarn-debug.log*yarn-error.log*pnpm-debug.log*#Editordirectoriesandfiles.idea.vscode*.suo*.ntvs**.njsproj*.sln*.sw?*.jar*.war*.nar*.ear*.zip*.tar.gz*.rar*.iml#virtualmachinecrashlogs,seehttp://www.java.com/en/download/help/error_hotspot.xmlhs_err_pid*#privacyFilesjasypt.propertiesover
2022-11-28 19:57 · springboot / 小技巧 / 配置文件加密
[文章] Android富文本编辑器,webview中提取HTML代码,去标签获得纯文字
富文本编辑器中,要读取html内容,想要获得输入文字的个数,html中有各种标签,有图片,有视频音频等,怎么提取纯文字呢。
2019-12-28 22:00 · webview / HTML / 富文本编辑器
[文章] Android 日期处理工具
publicclassAppDateUtils{publicstaticSimpleDateFormatsdfParse=newSimpleDateFormat("yyyy-M-dd",Locale.CHINA);publicstaticSimpleDateFormatsdfYMDHM=newSimpleDateFormat("yyyy-MM-ddHH:mm",Locale.CHINA);publicstaticSimpleDateFormatsdfYMDHMS=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",Locale.CHINA);publicstaticSimpleDateFormatsdfYMDHMS2=newSimpleDateFormat("yyyyMMddHHmmss",Locale.CHINA);publicstaticSimpleDateFormatsdfYMD=newSimpleDateFormat("yyyy-MM-dd",Locale.CHINA);publicstaticSimpleDateFormatsdfMD=newSimpleDateFormat("MM-dd",Locale.CHINA);publicstaticSimpleDateFormatsdfHM=newSimpleDateFormat("HH:mm",Locale.CHINA);publicstaticSimpleDateFormatsdfHMS=newSimpleDateFormat("HH:mm:ss",Locale.CHINA);publicstaticSimpleDateFormatsdfMDHM=newSimpleDateFormat("MM/ddHH:mm",Locale.CHINA);publicstaticSimpleDateFormatsdfMDAndHM=newSimpleDateFormat("MM-ddHH:mm",Locale.CHINA);publicstaticSimpleDateFormatsdfYM=newSimpleDateFormat("yyyy-MM",Locale.CHINA);publicstaticSimpleDateFormatsdfMD2=newSimpleDateFormat("M月d日");publicstaticSimpleDateFormatsdfUTC=newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");privatefinalstaticString[]weekOfDays=newString[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};/***直接输出【"X秒前"】或【"X分钟前"】或【"X小时前"(X<=5)】或【今天/昨天/前天"HH:mm"】或【"MM-dd"】格式*/publicstaticStringgetExactDate(longdate){if(sdfYMD.format(date).equals(sdfYMD.format(newDate()))){longrange=System.currentTimeMillis()-date;if(range<1000){//避免1秒内完成了所有流程而显示负数return"1秒前";}elseif(range<=60*1000&&range>=1000){returnrange/1000+"秒前";}elseif(range<=60*60*1000&&range>=60*1000){returnrange/60000+"分钟前";}elseif(range<=6*60*60*1000&&range>=60*60*1000){returnrange/3600000+"小时前";//小于6小时}else{return"今天"+sdfHM.format(date);}}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-24*60*60*1000))){return"昨天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-2*24*60*60*1000))){return"前天"+sdfHM.format(date);}else{returnsdfMD.format(date);}}/***直接输出【今天/昨天/前天"HH:mm"】或【"yyyy-MM-dd"】格式*/publicstaticStringgetYMDTDate(longdate){if(sdfYMD.format(date).equals(sdfYMD.format(newDate()))){return"今天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-24*60*60*1000))){return"昨天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-2*24*60*60*1000))){return"前天"+sdfHM.format(date);}else{returnsdfYMD.format(date);}}/***直接输出"yyyy-MM-dd"格式*/publicstaticStringgetYMDDate(longdate){returnsdfYMD.format(date);}/***直接输出"HH:mm:ss"格式*/publicstaticStringgetHMSDate(longdate){returnsdfHMS.format(date);}/***直接输出【"X秒前"】或【"X分钟前"】或"MM-ddHH:mm"格式*/publicstaticStringgetMDHMDate(longdate){if(sdfMD.format(date).equals(sdfMD.format(newDate()))){longrange=System.currentTimeMillis()-date;if(range<1000){//避免1秒内完成了所有流程而显示负数return"1秒前";}elseif(range<=60*1000&&range>=1000){returnrange/1000+"秒前";}elseif(range<=60*60*1000&&range>=60*1000){returnrange/60000+"分钟前";}else{returnsdfMDHM.format(date);}}else{returnsdfMDHM.format(date);}}/***直接输出"MM-dd"格式或【今天】*/publicstaticStringgetMDDate(longdate){if(sdfYMD.format(date).equals(sdfYMD.format(newDate()))){return"今天";}returnsdfMD.format(date);}/***直接输出【今天/昨天/前天"HH:mm"】或【"MM-dd"】格式*/publicstaticStringgetMDTDate(longdate){if(sdfYMD.format(date).equals(sdfYMD.format(newDate()))){return"今天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(System.currentTimeMillis()-24*60*60*1000))){return"昨天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(System.currentTimeMillis()-2*24*60*60*1000))){return"前天"+sdfHM.format(date);}else{returnsdfMD.format(date);}}/***返回"某月某日"**@paramdate*@return*/publicstaticStringgetMDDate2(longdate){returnsdfMD2.format(date);}/***直接输出【昨天/前天"HH:mm"】或【"MM-dd"】格式*/publicstaticStringgetYMDHMTDate(longdate){Calendarcal1=Calendar.getInstance();cal1.setTime(newDate(date));CalendarnowCal1=Calendar.getInstance();nowCal1.setTime(newDate());if(sdfYMD.format(date).equals(sdfYMD.format(newDate()))){returnsdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-24*60*60*1000))){return"昨天"+sdfHM.format(date);}elseif(sdfYMD.format(date).equals(sdfYMD.format(newDate().getTime()-2*24*60*60*1000))){return"前天"+sdfHM.format(date);}elseif(cal1.get(Calendar.YEAR)!=nowCal1.get(Calendar.YEAR)){returnsdfYMDHM.format(date);}else{returnsdfMDAndHM.format(date);}}/***直接输出"yyyy-MM-ddHH:mm"格式*/publicstaticStringgetYMDHMDate(longdate){returnsdfYMDHM.format(date);}/***直接输出"yyyy-MM"格式*/publicstaticStringgetYMDate(longdate){returnsdfYM.format(date);}/***直接输出"HH:mm"格式*/publicstaticStringgetHMDate(longdate){returnsdfHM.format(date);}/***直接输出"yyyy-MM-ddHH:mm:ss"格式*/publicstaticStringgetYMDHMSDate(longdate){returnsdfYMDHMS.format(date);}/***直接输出"yyyyMMddHHmmss"格式*/publicstaticStringgetYMDHMSDate2(longdate){returnsdfYMDHMS2.format(date);}/***格式为yyyy-M-dd才可以使用,yyyy-MM-dd或会失败*/publicstaticlongparseLong(Stringdate){try{returnsdfParse.parse(date).getTime();}catch(ParseExceptione){e.printStackTrace();}return0L;}/***格式为yyyy-MM-dd才可以使用*/publicstaticlongparseLong2(Stringdate){try{returnsdfYMD.parse(date).getTime();}catch(ParseExceptione){e.printStackTrace();}return0L;}/***格式为yyyy-MM-ddHH:mm:ss才可以使用*/publicstaticlongparseLong3(Stringdate){try{returnsdfYMDHMS.parse(date).getTime();}catch(ParseExceptione){e.printStackTrace();}return0L;}/***格式为yyyy-MM-ddHH:mm才可以使用*/publicstaticlongparseLong4(Stringdate){try{returnsdfYMDHM.parse(date).getTime();}catch(ParseExceptione){e.printStackTrace();}return0L;}/***自定义日期解析格式*/publicstaticlongparseLong(Stringdate,SimpleDateFormatformat){try{returnformat.parse(date).getTime();}catch(ParseExceptione){e.printStackTrace();}return0L;}/***获取指定日期是星期几参数为null时表示获取当前日期是星期几**@parammilliseconds*@return*/publicstaticStringgetWeekOfDate(Longmilliseconds){returngetWeekOfDate(milliseconds,weekOfDays);}publicstaticStringgetWeekOfDate(Longmilliseconds,String[]weekOfDays){Calendarcalendar=Calendar.getInstance();if(milliseconds!=null){calendar.setTimeInMillis(milliseconds);}intw=calendar.get(Calendar.DAY_OF_WEEK)-1;if(w<0){w=0;}returnweekOfDays[w];}/***计算date之后n天的日期*/publicstaticDategetDateAfter(Datedate,intn){Calendarnow=Calendar.getInstance();now.setTime(date);now.set(Calendar.DATE,now.get(Calendar.DATE)+n);returnnow.getTime();}/***计算date之前n天的日期*/publicstaticDategetDateBefore(Datedate,intn){Calendarnow=Calendar.getInstance();now.setTime(date);now.set(Calendar.DATE,now.get(Calendar.DATE)-n);returnnow.getTime();}publicstaticbooleanisSameDay(Datedate1,Datedate2){Calendarcal1=Calendar.getInstance();cal1.setTime(date1);Calendarcal2=Calendar.getInstance();cal2.setTime(date2);returnisSameDay(cal1,cal2);}/***比较两个日期相差的天数,有正负**@paramdate1*@paramdate2*@return*/publicstaticintcalcIntervalDays(Datedate1,Datedate2){Calendarcalendar1=Calendar.getInstance();Calendarcalendar2=Calendar.getInstance();calendar1.setTime(date1);calendar2.setTime(date2);calendar1.set(Calendar.HOUR_OF_DAY,0);calendar1.set(Calendar.MINUTE,0);calendar1.set(Calendar.SECOND,0);calendar1.set(Calendar.MILLISECOND,0);calendar2.set(Calendar.HOUR_OF_DAY,0);calendar2.set(Calendar.MINUTE,0);calendar2.set(Calendar.SECOND,0);calendar2.set(Calendar.MILLISECOND,0);intdays=(int)((calendar2.getTime().getTime()-calendar1.getTime().getTime())/(1000*3600*24));returndays;}publicstaticbooleanisSameDay(Calendarcal1,Calendarcal2){returncal1.get(0)==cal2.get(0)&&cal1.get(1)==cal2.get(1)&&cal1.get(6)==cal2.get(6);}publicstaticlongparseUTCTime(Stringutc){sdfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));try{returnsdfUTC.parse(utc).getTime();}catch(ParseExceptione){e.printStackTrace();}return0;}/***秒转成00:00:00*@paramseconds*@return*/publicstaticStringformatTime(longseconds){inttemp;StringBuffersb=newStringBuffer();if(seconds>3600){temp=(int)(seconds/3600);sb.append((seconds/3600)<10?"0"+temp+":":temp+":");temp=(int)(seconds%3600/60);changeSeconds(seconds,temp,sb);}else{temp=(int)(seconds%3600/60);changeSeconds(seconds,temp,sb);}returnsb.toString();}privatestaticvoidchangeSeconds(longseconds,inttemp,StringBuffersb){sb.append((temp<10)?"0"+temp+":":""+temp+":");temp=(int)(seconds%3600%60);sb.append((temp<10)?"0"+temp:""+temp);}}直接看每个方法的注释,就知道返回的格式了。你需要的格式,都有!!!
2020-02-07 21:38 · Android / 日期工具 / 工具类
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 16