Android 时间间隔显示处理 1小时前 1天前 一个月前

本文介绍了一个用于Android应用的时间格式化类,能够将时间差转换为更直观的形式,如几分钟前、几小时前等。

一.Android中我们常见显示几小时前,几天前,几月前,几年前,下面通过一个类来看看怎么算出该格式:

    我们只要把这个类  C+V  一下就能搞定

public class FormatCurrentData {
	
	/**设置每个阶段时间*/
	private static final int seconds_of_1minute = 60;

	private static final int seconds_of_30minutes = 30 * 60;

	private static final int seconds_of_1hour = 60 * 60;

	private static final int seconds_of_1day = 24 * 60 * 60;

	private static final int seconds_of_15days = seconds_of_1day * 15;

	private static final int seconds_of_30days = seconds_of_1day * 30;

	private static final int seconds_of_6months = seconds_of_30days * 6;

	private static final int seconds_of_1year = seconds_of_30days * 12;

	/**
	 * 格式化时间
	 * @param mTime
	 * @return
	 */
	public static String getTimeRange(String mTime)
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		/**获取当前时间*/
		Date  curDate = new  Date(System.currentTimeMillis());
		String dataStrNew= sdf.format(curDate);
		Date startTime=null;
		try {
			/**将时间转化成Date*/
			curDate=sdf.parse(dataStrNew);
			startTime = sdf.parse(mTime);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		/**除以1000是为了转换成秒*/
		long   between=(curDate.getTime()- startTime.getTime())/1000;
		int   elapsedTime= (int) (between);
		if (elapsedTime < seconds_of_1minute) {

			return "刚刚";
		}
		if (elapsedTime < seconds_of_30minutes) {

			return elapsedTime / seconds_of_1minute + "分钟前";
		}
		if (elapsedTime < seconds_of_1hour) {

			return "半小时前";
		}
		if (elapsedTime < seconds_of_1day) {

			return elapsedTime / seconds_of_1hour + "小时前";
		}
		if (elapsedTime < seconds_of_15days) {

			return elapsedTime / seconds_of_1day + "天前";
		}
		if (elapsedTime < seconds_of_30days) {

			return "半个月前";
		}
		if (elapsedTime < seconds_of_6months) {

			return elapsedTime / seconds_of_30days + "月前";
		}
		if (elapsedTime < seconds_of_1year) {

			return "半年前";
		}
		if (elapsedTime >= seconds_of_1year) {

			return elapsedTime / seconds_of_1year + "年前";
		}
		return "";
	}
}


<think> 首先,用户的问题是关于如何获取使用 `new Date(d).getTime()` 所表示时间的一个月的时间。用户想要通过 `new Date(d).getTime()` 来获取一个月的时间,并可能得到一个新的时间戳。 用户提供的引用内容是关于如何使用 JavaScript 获取时间戳和处理时间的一些方法。引用[1]展示了如何使用 `new Date(year, month, date).getTime()` 获取时间戳。引用[2]涉及 Java 中的时间处理。引用[3]讨论了 JavaScript 的 `Date.parse()` 和 `Date.getTime()`。引用[4]提到在苹果手机上的兼容性问题,建议使用 `replace(/-/g, '/')` 来处理日期字符串。 从用户的问题来看,核心是:给定一个时间点 `d`,如何计算一个月的时间,并得到新的时间戳。 关键点: - `d` 是一个日期对象或可以被解析为日期的对象(如字符串)。 - `new Date(d).getTime()` 返回该日期的时间戳(毫秒级)。 - 目标:获取一个月的时间戳。 在 JavaScript 中处理日期时,月份是敏感的,因为月份是从 0 开始的(0 表示一月,11 表示十二月)。而且,处理跨年或不同数月份时需要小心。 步骤: 1. 从给定的 `d` 创建一个日期对象。 2. 获取该日期的年份和月份。 3. 计算一个月的年份和月份。 - 如果当月份是 0(一月),则一个月是上一年的十二月(月份11)。 - 例如,如果当日期是 2023-01-15,一个月是 2022-12-15。 - 如果当月份不是一月,则月份减一。 4. 设置日期为新月份的同一。但需要注意月份数差异。例如,从 3月31日 到 2月28日(或29日),需要处理边界情况。 - 常见做法是将日期设置为1日,然后调整,以避免数问题。 - 或者,使用 `setMonth` 方法自动处理。 JavaScript 的 `Date` 对象有 `setMonth` 方法,可以设置月份,它会自动处理年份和日期调整。例如: - `date.setMonth(date.getMonth() - 1)` 会将日期设置为一个月,同时处理年份变化和日期有效性(比如从3月31日设置到2月,会自动调整为2月28或29日)。 所以,最佳方法是: - 创建一个日期对象:`const date = new Date(d);` - 使用 `date.setMonth(date.getMonth() - 1);` 来设置一个月。 - 然后获取时间戳:`const newTimestamp = date.getTime();` 这样,`newTimestamp` 就是一个月的时间戳。 用户提到兼容性问题(引用[4]),所以如果 `d` 是字符串,最好先标准化,比如替换 `-` 为 `/` 以确保在所有浏览器兼容。 在回答中,我应该: - 使用中文回复。 - 保持结构清晰:解释步骤,给出代码示例。 - 根据系统指令,使用正确的 LaTeX 格式:行内数学用 `$...$`,独立公式用 `$$...$$`。但这里可能不需要数学公式,除非涉及计算。 - 生成相关问题。 - 在引用末尾添加引用标识。 回顾用户上一次的问题:似乎这是第一次交互,没有历史消息。用户只提供了这个引用列表和当问题。 生成相关问题: - 基于主题:时间处理、JavaScript 日期 API、兼容性问题等。 - 例如: 1. 如何处理日期字符串在不同浏览器的兼容性问题? 2. 如何获取更精确的时间间隔(如小时)? 3. 时间戳在存储和比较中的应用? 回答结构: 1. 解释问题和方法。 2. 提供代码示例。 3. 讨论潜在问题(如日期边界)。 4. 生成相关问题。 代码示例: ```javascript // 示例代码 function getPreviousMonthTimestamp(d) { // 创建日期对象,处理兼容性问题 let date; if (typeof d === 'string') { // 标准化日期字符串,确保兼容 date = new Date(d.replace(/-/g, '/')); } else { date = new Date(d); } // 设置一个月 date.setMonth(date.getMonth() - 1); // 返回时间戳 return date.getTime(); } // 使用示例 const d = '2023-08-15'; // 示例日期 const timestamp = getPreviousMonthTimestamp(d); console.log(timestamp); // 输出一个月的时间戳 ``` 完整回答: - 开头解释。 - 代码块。 - 注意事项。 - 相关问题。 </think> ### 如何通过 `new Date(d).getTime()` 获取一个月的时间 获取指定时间点 `d` 的一个月时间戳的核心步骤是:先将 `d` 转为日期对象,调整月份并处理跨年和日期边界问题,最后获取新时间戳。以下是详细方法: 1. **创建兼容的日期对象** 若 `d` 是字符串(如 `'2023-08-15'`),需先标准化格式以避免浏览器兼容性问题(参考引用[4]): ```javascript const dateObj = new Date(d.replace(/-/g, '/')); // 替换"-"为"/"确保跨平台兼容 ``` 2. **计算一个月的日期** 使用 `setMonth()` 方法自动处理月份和年份变化: - `dateObj.getMonth()` 获取当月份(0-11)。 - `dateObj.setMonth(dateObj.getMonth() - 1)` 设置一个月(自动处理跨年与无效日期)。 3. **获取时间戳** 通过 `getTime()` 得到新时间戳(毫秒级)。 #### 完整代码示例 ```javascript function getPreviousMonthTimestamp(d) { // 标准化日期输入(兼容字符串格式) let dateObj; if (typeof d === 'string') { dateObj = new Date(d.replace(/-/g, '/')); // 处理兼容性问题[^4] } else { dateObj = new Date(d); } // 计算一个月 const currentMonth = dateObj.getMonth(); // 当月份(0-11) dateObj.setMonth(currentMonth - 1); // 自动处理跨年(如1月→12月) // 返回时间戳 return dateObj.getTime(); } // 示例使用 const myDate = '2023-08-15'; // 输入日期 const prevMonthTimestamp = getPreviousMonthTimestamp(myDate); console.log(prevMonthTimestamp); // 输出:一个月(2023-07-15)的时间戳 ``` #### 关键注意事项 - **日期边界问题**:若原日期是月末(如31日),调整后可能变为下月初(如3月31日→2月28日),`setMonth()` 会自动处理此情况[^4]。 - **年份自动处理**:当月份为0(1月)时,`setMonth(-1)` 会自动变为上一年的11月(12月)。 - **兼容性**:输入日期字符串时应使用 `replace(/-/g, '/')` 确保iOS/Android一致性[^4]。 - **输入验证**:建议检查 `d` 是否为有效日期(例如使用 `!isNaN(dateObj.getTime())`)。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值