我的知识记录

怎样把日期改为统一格式(图文)

将日期改为统一格式有多种方法,以下是常见的几种场景和解决方案:

1. 文件系统中的日期统一

批量修改文件名中的日期格式


 
bash
#!/bin/bash # 统一文件名中的日期格式为 YYYY-MM-DD for file in *; do # 匹配多种日期格式 if [[ $file =~ ([0-9]{1,2})[-/]([0-9]{1,2})[-/]([0-9]{4}) ]]; then # M/D/YYYY 或 MM/DD/YYYY 格式 month=${BASH_REMATCH[1]} day=${BASH_REMATCH[2]} year=${BASH_REMATCH[3]} new_date="${year}-$(printf "%02d" $month)-$(printf "%02d" $day)" new_file="${file/${BASH_REMATCH[0]}/$new_date}" mv "$file" "$new_file" echo "重命名: $file -> $new_file" elif [[ $file =~ ([0-9]{4})([0-9]{2})([0-9]{2}) ]]; then # YYYYMMDD 格式 year=${BASH_REMATCH[1]} month=${BASH_REMATCH[2]} day=${BASH_REMATCH[3]} new_date="${year}-${month}-${day}" new_file="${file/${BASH_REMATCH[0]}/$new_date}" mv "$file" "$new_file" echo "重命名: $file -> $new_file" fi done

2. 数据库中的日期统一

SQL 统一日期格式


 
sql
-- MySQL 统一日期格式 UPDATE your_table SET date_column = DATE_FORMAT(STR_TO_DATE(date_column, '%m/%d/%Y'), '%Y-%m-%d') WHERE date_column REGEXP '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$'; -- 统一多种格式 UPDATE your_table SET date_column = CASE WHEN date_column REGEXP '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$' THEN DATE_FORMAT(STR_TO_DATE(date_column, '%m/%d/%Y'), '%Y-%m-%d') WHEN date_column REGEXP '^[0-9]{4}[0-9]{2}[0-9]{2}$' THEN DATE_FORMAT(STR_TO_DATE(date_column, '%Y%m%d'), '%Y-%m-%d') ELSE date_column END;

3. 编程批量处理

Python 统一日期格式


 
python
import os import re from datetime import datetime def standardize_date_format(text): """ 将文本中的各种日期格式统一为 YYYY-MM-DD """ # 定义常见日期格式的正则表达式 patterns = [ (r'(\d{1,2})/(\d{1,2})/(\d{4})', '%m/%d/%Y'), # M/D/YYYY (r'(\d{1,2})-(\d{1,2})-(\d{4})', '%m-%d-%Y'), # M-D-YYYY (r'(\d{4})/(\d{1,2})/(\d{1,2})', '%Y/%m/%d'), # YYYY/M/D (r'(\d{4})-(\d{1,2})-(\d{1,2})', '%Y-%m-%d'), # YYYY-M-D (r'(\d{4})(\d{2})(\d{2})', '%Y%m%d'), # YYYYMMDD ] for pattern, format_str in patterns: matches = re.findall(pattern, text) for match in matches: try: if len(match) == 3: date_str = f"{match[0]}{match[1]}{match[2]}" if format_str == '%Y%m%d': date_obj = datetime.strptime(date_str, format_str) else: separator = '/' if '/' in format_str else '-' date_str = f"{match[0]}{separator}{match[1]}{separator}{match[2]}" date_obj = datetime.strptime(date_str, format_str) standardized_date = date_obj.strftime('%Y-%m-%d') # 替换原文中的日期 original_date = ''.join(match) if format_str == '%Y%m%d' else f"{match[0]}{separator}{match[1]}{separator}{match[2]}" text = text.replace(original_date, standardized_date) except ValueError: continue return text # 批量处理文件内容 def process_files_in_directory(directory): for filename in os.listdir(directory): file_path = os.path.join(directory, filename) if os.path.isfile(file_path): try: # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 统一日期格式 new_content = standardize_date_format(content) # 写回文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(new_content) print(f"处理完成: {filename}") except Exception as e: print(f"处理失败 {filename}: {e}") # 使用示例 process_files_in_directory("./documents")

JavaScript 统一日期格式


 
javascript
function standardizeDateFormat(text) { // 定义常见日期格式的正则表达式 const patterns = [ { regex: /(\d{1,2})\/(\d{1,2})\/(\d{4})/g, format: 'MDY' }, // M/D/YYYY { regex: /(\d{1,2})-(\d{1,2})-(\d{4})/g, format: 'MDY' }, // M-D-YYYY { regex: /(\d{4})\/(\d{1,2})\/(\d{1,2})/g, format: 'YMD' }, // YYYY/M/D { regex: /(\d{4})-(\d{1,2})-(\d{1,2})/g, format: 'YMD' }, // YYYY-M-D { regex: /(\d{4})(\d{2})(\d{2})/g, format: 'YMD' } // YYYYMMDD ]; let result = text; patterns.forEach(pattern => { result = result.replace(pattern.regex, (match, p1, p2, p3) => { try { let date; if (pattern.format === 'MDY') { date = new Date(`${p1}/${p2}/${p3}`); } else { if (match.length === 8) { // YYYYMMDD 格式 date = new Date(`${p1}-${p2}-${p3}`); } else { date = new Date(`${p1}-${p2}-${p3}`); } } if (!isNaN(date.getTime())) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } return match; } catch (e) { return match; } }); }); return result; } // 批量处理HTML元素中的日期 function processDateElements() { const elements = document.querySelectorAll('[data-date]'); elements.forEach(element => { const originalText = element.textContent; const standardizedText = standardizeDateFormat(originalText); element.textContent = standardizedText; }); }

4. Excel/CSV 文件中的日期统一

Python 处理 CSV


 
python
import pandas as pd from datetime import datetime def standardize_csv_dates(csv_file, output_file, date_columns): # 读取 CSV 文件 df = pd.read_csv(csv_file) # 统一指定列的日期格式 for column in date_columns: if column in df.columns: df[column] = pd.to_datetime(df[column], infer_datetime_format=True, errors='coerce') df[column] = df[column].dt.strftime('%Y-%m-%d') # 保存处理后的文件 df.to_csv(output_file, index=False) print(f"日期格式统一完成,保存至 {output_file}") # 使用示例 standardize_csv_dates('input.csv', 'output.csv', ['upload_date', 'create_date'])

5. 文本文件批量处理脚本


 
python
#!/usr/bin/env python3 import os import re from datetime import datetime def unify_date_formats_in_text(directory_path): """ 统一目录中所有文本文件的日期格式 """ def convert_date_to_standard(match): """将匹配到的日期转换为标准格式""" try: # 尝试不同的日期格式 date_str = match.group(0) # 处理不同分隔符 if '/' in date_str: formats = ['%m/%d/%Y', '%Y/%m/%d'] elif '-' in date_str: formats = ['%m-%d-%Y', '%Y-%m-%d'] else: # 处理连续数字格式 if len(date_str) == 8: date_obj = datetime.strptime(date_str, '%Y%m%d') return date_obj.strftime('%Y-%m-%d') return date_str for fmt in formats: try: date_obj = datetime.strptime(date_str, fmt) return date_obj.strftime('%Y-%m-%d') except ValueError: continue except Exception: return match.group(0) return match.group(0) # 遍历目录中的所有文件 for root, dirs, files in os.walk(directory_path): for file in files: if file.endswith(('.txt', '.log', '.csv', '.json')): file_path = os.path.join(root, file) try: # 读取文件 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 定义日期正则表达式 date_patterns = [ r'\b\d{1,2}/\d{1,2}/\d{4}\b', # M/D/YYYY r'\b\d{1,2}-\d{1,2}-\d{4}\b', # M-D-YYYY r'\b\d{4}/\d{1,2}/\d{1,2}\b', # YYYY/M/D r'\b\d{4}-\d{1,2}-\d{1,2}\b', # YYYY-M-D r'\b\d{8}\b' # YYYYMMDD ] # 统一所有日期格式 modified_content = content for pattern in date_patterns: modified_content = re.sub(pattern, convert_date_to_standard, modified_content) # 写回文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(modified_content) print(f"✓ 已处理: {file_path}") except Exception as e: print(f"✗ 处理失败 {file_path}: {e}") # 使用示例 if __name__ == "__main__": unify_date_formats_in_text("./data_files")

三步快速操作法:

  1. 识别日期模式:找出文档中存在的各种日期格式
  2. 选择处理工具:根据数据类型选择合适的脚本或工具
  3. 批量执行转换:运行脚本统一转换为标准格式(推荐:YYYY-MM-DD)
这样的标准化处理能够确保所有的日期都遵循同一格式,便于后续的数据处理和分析。
 

怎样把日期改为统一格式(图文)

标签:

更新时间:2025-12-15 13:24:56

上一篇:如何一次性更改日期格式(图文)

下一篇:上传的文件不能大于1mb怎么办(图文)