2025-06-19 14:10:26 +08:00

204 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
});
}