204 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| import dayTs from './Date';
 | ||
| import fs from '@ohos.file.fs';
 | ||
| import { BusinessError } from '@ohos.base';
 | ||
| import { CommonFileTag } from '../config';
 | ||
| 
 | ||
| enum timeType {
 | ||
|   fulltime = 1
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 获取当前时间
 | ||
|  * @param type
 | ||
|  * @returns
 | ||
|  */
 | ||
| export function GetCurrentTime(type?: timeType): string {
 | ||
|   if (type === 1) {
 | ||
|     return dayTs().format("YYYYMMDDHHmmss")
 | ||
|   } else {
 | ||
|     return dayTs().format("YYYY-MM-DD HH:mm:ss")
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 是否是指定天数之前
 | ||
|  * @param date
 | ||
|  * @param days
 | ||
|  * @returns
 | ||
|  */
 | ||
| export function IsDaysAgo(date: string | number | Date, days: number = 2): boolean {
 | ||
|   const today = dayTs(); // 当前日期
 | ||
|   const target = dayTs(date).format("YYYY-MM-DD HH:mm:ss.SSS"); // 需要判断的日期
 | ||
|   // 计算两个日期之间的差异天数
 | ||
|   const diffDays = today.diff(target, 'day');
 | ||
|   // 如果差异天数大于等于指定天数,则返回 true
 | ||
|   return diffDays >= days;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 字符串转字节数组
 | ||
|  * @param str
 | ||
|  * @returns
 | ||
|  */
 | ||
| export function StringToBytes(str: string): Uint8Array {
 | ||
|   const bytes = new Uint8Array(str.length);
 | ||
|   for (let i = 0; i < str.length; i++) {
 | ||
|     bytes[i] = str.charCodeAt(i);
 | ||
|   }
 | ||
|   return bytes;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 字符串转ASCII码
 | ||
|  */
 | ||
| export function StringToASCII(str: string): number[] {
 | ||
|   const arr: number[] = [];
 | ||
|   for (let i = 0; i < str.length; i++) {
 | ||
|     arr.push(str.charCodeAt(i));
 | ||
|   }
 | ||
|   return arr;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 数组转字节
 | ||
|  */
 | ||
| export function ArrayToByteArray(array: number[]): Uint8Array {
 | ||
|   const buf = new ArrayBuffer(array.length);
 | ||
|   const view = new Uint8Array(buf);
 | ||
|   for (let i = 0; i < array.length; i++) {
 | ||
|     view[i] = array[i] & 0xFF;
 | ||
|   }
 | ||
|   return view;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 数字转字节数组
 | ||
|  * @param number 要转换的数字
 | ||
|  * @param len 字节数
 | ||
|  * @returns 返回字节数组
 | ||
|  */
 | ||
| export function NumberToByteArray(number: number | string, len: number): number[] {
 | ||
|   let str = Math.floor(Number(number)).toString(2);
 | ||
|   if (str.length > len) {
 | ||
|     console.log('数据长度不对~~');
 | ||
|     return [];
 | ||
|   }
 | ||
|   const byteString = FillZero(str, len);
 | ||
| 
 | ||
|   const arrBytes: number[] = [];
 | ||
|   for (let i = byteString.length; i > 0; ) {
 | ||
|     let j = i - 8;
 | ||
|     if (j < 0) {
 | ||
|       j = 0;
 | ||
|     }
 | ||
|     const s = byteString.slice(j, i);
 | ||
|     const v = parseInt(s, 2);
 | ||
|     arrBytes.push(v);
 | ||
|     i -= 8;
 | ||
|   }
 | ||
|   return arrBytes;
 | ||
| }
 | ||
| 
 | ||
| /*
 | ||
|   * 将字符串填充为指定长度的字符串,前面补0
 | ||
|   * @param str 要填充的字符串或数字
 | ||
|   * @param len 目标长度
 | ||
|   * @return 返回填充后的字符串
 | ||
|  */
 | ||
| export function FillZero(str: string | number, len: number): string {
 | ||
|   str = str.toString();
 | ||
|   if (str.length >= len || len <= 0) {
 | ||
|     return str;
 | ||
|   }
 | ||
|   const zeroStr = '0'.repeat(len - str.length);
 | ||
|   return zeroStr + str;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 将数组按指定大小分块
 | ||
|  * @param arr 原始数组
 | ||
|  * @param size 每块大小(必须 >= 1)
 | ||
|  * @returns 分块后的二维数组
 | ||
|  */
 | ||
| export function CutArray<T>(arr: readonly T[], size: number): T[][] {
 | ||
|   if (!Array.isArray(arr) || size < 1) return [];
 | ||
| 
 | ||
|   const result: T[][] = [];
 | ||
|   for (let i = 0; i < arr.length; i += size) {
 | ||
|     result.push(arr.slice(i, i + size));
 | ||
|   }
 | ||
|   return result;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 将GPS坐标从度分格式(DDMM.MMMM)转换为十进制度格式
 | ||
|  * @param ddmm - 度分格式坐标(例如 11630.1234 表示116度30.1234分)
 | ||
|  * @returns 十进制度格式坐标(例如 116.502056666...)
 | ||
|  */
 | ||
| export function ConvertDdmmToDecimalDegrees(ddmm: number): number {
 | ||
|   // 提取度数部分:除以100后取整
 | ||
|   const degrees = Math.floor(ddmm / 100);
 | ||
|   // 提取分数部分(包含小数):对100取模
 | ||
|   const minutes = ddmm % 100;
 | ||
|   // 将分数转换为度并相加:1度=60分
 | ||
|   return degrees + minutes / 60;
 | ||
| }
 | ||
| 
 | ||
| //对象深拷贝
 | ||
| export function DeepClone<T extends Object>(target: T): T {
 | ||
|   // 如果是对象,且不是原始值null
 | ||
|   if (typeof target === 'object' && target !== null) {
 | ||
|     // 创建容器
 | ||
|     const result: ESObject = Array.isArray(target) ? [] : {};
 | ||
|     const keys = Object.keys(target) as Array<keyof T>; //注解二
 | ||
|     keys.forEach(key => {
 | ||
|       Reflect.set(result, key, DeepClone(Reflect.get(target, key)));
 | ||
|     });
 | ||
|     return result;
 | ||
|   }
 | ||
|   // 如果是原始值,则直接返回
 | ||
|   return target;
 | ||
| }
 | ||
| 
 | ||
| /*
 | ||
|   * 检查文件或目录是否存在
 | ||
|   * @param path 文件或目录的路径
 | ||
|   * @return 返回一个 Promise,解析为 true 如果存在,否则为 false
 | ||
|  */
 | ||
| export function IsExit(path: string): Promise<boolean> {
 | ||
|   return new Promise((resolve, reject) => {
 | ||
|     try {
 | ||
|       let res = fs.accessSync(path);
 | ||
|       if (res) {
 | ||
|         console.info(CommonFileTag, "file exists");
 | ||
|         resolve(true);
 | ||
|       } else {
 | ||
|         console.info(CommonFileTag, "file not exists");
 | ||
|         resolve(false);
 | ||
|       }
 | ||
|     } catch (error) {
 | ||
|       let err: BusinessError = error as BusinessError;
 | ||
|       console.error(CommonFileTag, "accessSync failed with error message: " + err.message + ", error code: " + err.code);
 | ||
|       reject(false);
 | ||
|     }
 | ||
|   });
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * 创建文件夹
 | ||
|  * @param path 文件夹路径
 | ||
|  * @return 返回一个 Promise,解析为 true 如果创建成功,否则为 false
 | ||
|  */
 | ||
| export function CreateDir(path: string): Promise<boolean> {
 | ||
|   return new Promise((resolve, reject) => {
 | ||
|     try {
 | ||
|       fs.mkdirSync(path);
 | ||
|       console.info(CommonFileTag, "Directory created successfully");
 | ||
|       resolve(true);
 | ||
|     } catch (error) {
 | ||
|       let err: BusinessError = error as BusinessError;
 | ||
|       console.error(CommonFileTag, "mkdirSync failed with error message: " + err.message + ", error code: " + err.code);
 | ||
|       reject(false);
 | ||
|     }
 | ||
|   });
 | ||
| } |