Flex中字符串String按照格式转化为日期Date的方法

本文介绍了一种在Flex中将字符串转换为Date对象的方法,该方法支持多种日期和时间格式,包括“年月日时分秒”。文章提供了完整的ActionScript代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Flex中,要通过传入时间的字符串和格式字符串的方式来转换出Date,Flex本身没有完善的方法,不知道Adobe在想什么,这么简单实用的功能都没有.(回想起来,还是java神马的好)

在网上找了好久都没有完善的解决方案,最后偶然发现DateField带着一个StringToDate的静态方法,但是只支持"年月日"的日期格式,不支持"时分秒"等的时间格式,于是对其功能进行了扩展.

闲话不多扯,下面是源代码,拿去直接可以用.

目前只扩展到了对"年月日时分秒".

ActionScript:

 

public function string2Date(valueString:String, inputFormat:String):Date
{
	var mask:String
	var temp:String;
	var dateString:String = "";
	var monthString:String = "";
	var yearString:String = "";
	var hourString:String = "";
	var minuteString:String = "";
	var secondString:String = "";
	var j:int = 0;
	
	var n:int = inputFormat.length;
	for (var i:int = 0; i < n; i++,j++)
	{
		temp = "" + valueString.charAt(j);
		mask = "" + inputFormat.charAt(i);
		
		if (mask == "M")
		{
			if (isNaN(Number(temp)) || temp == " ")
				j--;
			else
				monthString += temp;
		}
		else if (mask == "D")
		{
			if (isNaN(Number(temp)) || temp == " ")
				j--;
			else
				dateString += temp;
		}
		else if (mask == "Y")
		{
			yearString += temp;
		}
		else if(mask=="J")
		{
			if (isNaN(Number(temp)) || temp == " ")
				j--;
			else
				hourString += temp;
		}
		else if(mask=="N")
		{
			if (isNaN(Number(temp)) || temp == " ")
				j--;
			else
				minuteString += temp;
		}
		else if(mask=="S")
		{
			if (isNaN(Number(temp)) || temp == " ")
				j--;
			else
				secondString += temp;
		}
		else if (!isNaN(Number(temp)) && temp != " ")
		{
			return null;
		}
	}
	
	temp = "" + valueString.charAt(inputFormat.length - i + j);
	if (!(temp == "") && (temp != " "))
		return null;
	
	var monthNum:Number = Number(monthString);
	var dayNum:Number = Number(dateString);
	var yearNum:Number = Number(yearString);
	var hourNum:Number = Number(hourString);
	var minuteNum:Number = Number(minuteString);//如果字符串为空会转换成0
	var secondNum:Number = Number(secondString);
	if (isNaN(yearNum) || isNaN(monthNum) || isNaN(dayNum))
		return null;
	
	if (yearString.length == 2 && yearNum < 70)
		yearNum+=2000;
	
	var newDate:Date = new Date(yearNum, monthNum - 1, dayNum,hourNum,minuteNum,secondNum);
	
	if (dayNum != newDate.getDate() || (monthNum - 1) != newDate.getMonth())
		return null;
	
	return newDate;
}

 

<think>我们使用JavaScript的Date对象来获取当前时间,然后格式化为"20250609111111"这样的字符串(即年月日时分秒,每个部分都是两位数,且没有分隔符)。 注意:这里需要获取的是中国时间(即本地时间,中国标准时间CST,UTC+8),Date对象默认获取的是本地时间,所以直接使用即可。 步骤: 1. 创建一个Date对象表示当前时间。 2. 分别获取年、月、日、时、分、秒。注意月份从0开始,所以要加1。 3. 将每个部分换为字符串,并确保是两位数(不足两位前面补0)。 4. 拼接这些字符串。 我们写一个函数来实现:</think># JavaScript 获取当前中国时间并格式字符串 在JavaScript中获取当前中国时间(UTC+8)并格式化为"20250609111111"这样的字符串(年月日时分秒连续无分隔符)是常见需求。下面我将详细解释实现方法。 ## 核心实现代码 ```javascript // 获取当前中国时间并格式化为YYYYMMDDHHmmss格式 function getCurrentChinaTimeString() { // 创建Date对象(默认获取本地时间,在中国即为中国标准时间) const now = new Date(); // 获取年份(4位数) const year = now.getFullYear(); // 获取月份(0-11,需+1并补零) const month = String(now.getMonth() + 1).padStart(2, '0'); // 获取日期(1-31,需补零) const day = String(now.getDate()).padStart(2, '0'); // 获取小时(0-23,需补零) const hours = String(now.getHours()).padStart(2, '0'); // 获取分钟(0-59,需补零) const minutes = String(now.getMinutes()).padStart(2, '0'); // 获取秒数(0-59,需补零) const seconds = String(now.getSeconds()).padStart(2, '0'); // 拼接成YYYYMMDDHHmmss格式字符串 return `${year}${month}${day}${hours}${minutes}${seconds}`; } // 使用示例 const currentTimeString = getCurrentChinaTimeString(); console.log(currentTimeString); // 输出如: "20250609111111" ``` ## 完整示例页面 ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>中国时间格式化工具</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } body { background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; color: #333; } .container { max-width: 800px; width: 100%; background: rgba(255, 255, 255, 0.95); border-radius: 15px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); overflow: hidden; } header { background: linear-gradient(90deg, #2c3e50, #4ca1af); color: white; padding: 25px; text-align: center; } h1 { font-size: 2.5rem; margin-bottom: 10px; } .content { padding: 30px; } .datetime-display { background: #ecf0f1; padding: 30px; border-radius: 10px; border: 2px dashed #3498db; margin-bottom: 20px; min-height: 150px; display: flex; flex-direction: column; justify-content: center; align-items: center; } #datetimeString { font-size: 2rem; font-weight: bold; color: #2c3e50; margin: 15px 0; text-align: center; word-break: break-all; letter-spacing: 2px; } .controls { display: flex; justify-content: center; gap: 15px; margin-bottom: 30px; } .btn { background: linear-gradient(90deg, #3498db, #2980b9); color: white; border: none; padding: 12px 20px; border-radius: 5px; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; } .btn:hover { transform: translateY(-2px); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); } .btn-success { background: linear-gradient(90deg, #2ecc71, #27ae60); } .info-section { background: #f9f9f9; padding: 20px; border-radius: 10px; margin-top: 20px; } .code-block { background: #2d3436; color: #f1f2f6; border-radius: 8px; padding: 15px; margin: 15px 0; font-family: 'Fira Code', monospace; overflow-x: auto; font-size: 0.9rem; } .timezone-info { margin-top: 15px; padding: 15px; background: #e3f2fd; border-radius: 8px; border-left: 4px solid #2196f3; } .explanation { margin-top: 20px; } .explanation h3 { color: #2c3e50; margin-bottom: 10px; } .explanation ul { padding-left: 20px; } .explanation li { margin-bottom: 8px; } footer { text-align: center; padding: 20px; background: #f8f9fa; color: #7f8c8d; border-top: 1px solid #eee; } </style> </head> <body> <div class="container"> <header> <h1>中国时间格式化工具</h1> <p>获取当前中国时间并格式化为YYYYMMDDHHmmss字符串</p> </header> <div class="content"> <div class="datetime-display"> <h2>当前中国时间:</h2> <div id="datetimeString">点击下方按钮获取</div> </div> <div class="controls"> <button class="btn" onclick="updateDateTime()">获取当前时间</button> <button class="btn btn-success" onclick="copyToClipboard()">复制到剪贴板</button> </div> <div class="info-section"> <h2>实现代码</h2> <div class="code-block"> // 获取当前中国时间并格式化为YYYYMMDDHHmmss格式 function getCurrentChinaTimeString() { // 创建Date对象(默认获取本地时间,在中国即为中国标准时间) const now = new Date(); // 获取年份(4位数) const year = now.getFullYear(); // 获取月份(0-11,需+1并补零) const month = String(now.getMonth() + 1).padStart(2, '0'); // 获取日期(1-31,需补零) const day = String(now.getDate()).padStart(2, '0'); // 获取小时(0-23,需补零) const hours = String(now.getHours()).padStart(2, '0'); // 获取分钟(0-59,需补零) const minutes = String(now.getMinutes()).padStart(2, '0'); // 获取秒数(0-59,需补零) const seconds = String(now.getSeconds()).padStart(2, '0'); // 拼接成YYYYMMDDHHmmss格式字符串 return `${year}${month}${day}${hours}${minutes}${seconds}`; } // 更新页面显示的时间 function updateDateTime() { document.getElementById('datetimeString').textContent = getCurrentChinaTimeString(); } // 复制到剪贴板 function copyToClipboard() { const text = document.getElementById('datetimeString').textContent; navigator.clipboard.writeText(text) .then(() => alert('已复制到剪贴板!')) .catch(err => console.error('复制失败:', err)); } // 页面加载时显示时间 window.onload = updateDateTime; </div> <div class="timezone-info"> <h3>时区说明</h3> <p>此工具获取的是中国标准时间(CST,UTC+8)。JavaScript的Date对象默认使用用户本地时区,在中国即为UTC+8时区。</p> </div> <div class="explanation"> <h3>关键知识点</h3> <ul> <li><strong>Date对象</strong>:JavaScript内置的日期时间对象,用于表示特定时刻</li> <li><strong>getFullYear()</strong>:获取四位数的年份(如2025)</li> <li><strong>getMonth()</strong>:获取月份(0-11),需要+1换为实际月份</li> <li><strong>padStart()</strong>:字符串方法,用于在开头填充字符使字符串达到指定长度</li> <li><strong>模板字符串</strong>:使用反引号(`)和${}语法拼接字符串</li> </ul> <h3>常见应用场景</h3> <ul> <li>生成唯一的时间戳文件名</li> <li>数据库记录创建时间</li> <li>日志文件的时间标记</li> <li>订单号生成</li> <li>API请求的时间参数</li> </ul> </div> </div> </div> <footer> <p>JavaScript日期时间处理 © 2023</p> </footer> </div> <script> // 获取当前中国时间并格式化为YYYYMMDDHHmmss格式 function getCurrentChinaTimeString() { // 创建Date对象(默认获取本地时间,在中国即为中国标准时间) const now = new Date(); // 获取年份(4位数) const year = now.getFullYear(); // 获取月份(0-11,需+1并补零) const month = String(now.getMonth() + 1).padStart(2, '0'); // 获取日期(1-31,需补零) const day = String(now.getDate()).padStart(2, '0'); // 获取小时(0-23,需补零) const hours = String(now.getHours()).padStart(2, '0'); // 获取分钟(0-59,需补零) const minutes = String(now.getMinutes()).padStart(2, '0'); // 获取秒数(0-59,需补零) const seconds = String(now.getSeconds()).padStart(2, '0'); // 拼接成YYYYMMDDHHmmss格式字符串 return `${year}${month}${day}${hours}${minutes}${seconds}`; } // 更新页面显示的时间 function updateDateTime() { document.getElementById('datetimeString').textContent = getCurrentChinaTimeString(); } // 复制到剪贴板 function copyToClipboard() { const text = document.getElementById('datetimeString').textContent; navigator.clipboard.writeText(text) .then(() => alert('已复制到剪贴板!')) .catch(err => console.error('复制失败:', err)); } // 页面加载时显示时间 window.onload = updateDateTime; // 每秒更新时间显示 setInterval(updateDateTime, 1000); </script> </body> </html> ``` ## 关键知识点详解 ### 1. 获取中国时间 JavaScript的`Date`对象默认使用用户本地时区,在中国即为中国标准时间(UTC+8),无需额外换[^1]。 ### 2. 时间组件获取 - `getFullYear()`: 获取四位年份(如2025) - `getMonth()`: 获取月份(0-11),需要+1换为实际月份 - `getDate()`: 获取日期(1-31) - `getHours()`: 获取小时(0-23) - `getMinutes()`: 获取分钟(0-59) - `getSeconds()`: 获取秒数(0-59) ### 3. 字符串格式化 使用`String.padStart(2, '0')`确保单位数显示为两位数: ```javascript const month = String(now.getMonth() + 1).padStart(2, '0'); // 05而不是5 ``` ### 4. 拼接时间字符串 使用模板字符串拼接成无分隔符的格式: ```javascript return `${year}${month}${day}${hours}${minutes}${seconds}`; ``` ## 常见问题解答 ### 1. 如何确保获取的是中国时间? JavaScript的`Date`对象默认使用用户本地时区,在中国运行的浏览器会自动使用中国标准时间(UTC+8)[^1]。 ### 2. 为什么月份需要加1? JavaScript的`getMonth()`方法返回0-11(0代表一月),所以需要+1换为实际月份。 ### 3. 如何获取其他格式的时间字符串? 修改拼接方式即可: ```javascript // 带分隔符格式:2025-06-09 11:11:11 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 中文格式:2025年06月09日 11时11分11秒 return `${year}年${month}月${day}日 ${hours}时${minutes}分${seconds}秒`; ``` ### 4. 如何获取UTC时间? 使用`getUTC`系列方法: ```javascript const utcHours = String(now.getUTCHours()).padStart(2, '0'); ``` ### 5. 如何提高性能? 如果不需要秒级精度,可以省略秒数的获取。对于频繁调用,可缓存Date对象。 ## 应用场景 1. **文件命名**:生成唯一的时间戳文件名 2. **数据库记录**:记录数据的创建/修改时间 3. **日志记录**:为日志条目添加时间标记 4. **订单号生成**:创建基于时间的唯一订单号 5. **API请求**:添加时间戳参数防止缓存 ## 相关问题 1. 如何将这种时间字符串换回Date对象? 2. 如何计算两个时间字符串之间的时间差? 3. 如何在不同时区之间换时间? 4. 如何格式日期为其他语言(如英文)? 5. 如何使用第三方库(如Moment.js)简化日期操作? [^1]: JavaScript的Date对象默认使用用户本地时区,在中国即为中国标准时间(UTC+8)。 [^2]: 使用`padStart()`方法确保单位数显示为两位数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值