1. System.DateTime 基础类
基本时间操作
// 获取当前时间
DateTime now = DateTime.Now; // 本地时间
DateTime utcNow = DateTime.UtcNow; // UTC时间
// 创建指定时间
DateTime date = new DateTime(2024, 1, 1, 10, 30, 0);
// 时间格式化
string formatted = now.ToString("yyyy-MM-dd HH:mm:ss");
string iso8601 = now.ToString("o"); // ISO 8601格式
2. 时间戳转换
Unix时间戳(秒)
using System;
public class TimestampConverter
{
// DateTime转Unix时间戳(秒)
public static long DateTimeToUnixTimestamp(DateTime dateTime)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan diff = dateTime.ToUniversalTime() - origin;
return (long)Math.Floor(diff.TotalSeconds);
}
// Unix时间戳(秒)转DateTime
public static DateTime UnixTimestampToDateTime(long unixTimestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return origin.AddSeconds(unixTimestamp).ToLocalTime();
}
}
毫秒级时间戳
public class TimestampConverter
{
// DateTime转毫秒时间戳
public static long DateTimeToMillisecondsTimestamp(DateTime dateTime)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan diff = dateTime.ToUniversalTime() - origin;
return (long)diff.TotalMilliseconds;
}
// 毫秒时间戳转DateTime
public static DateTime MillisecondsTimestampToDateTime(long millisecondsTimestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return origin.AddMilliseconds(millisecondsTimestamp).ToLocalTime();
}
}
3. 时区处理
使用 TimeZoneInfo
using System;
public class TimeZoneHelper
{
// 获取所有可用时区
public static void ListAllTimeZones()
{
ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
foreach (TimeZoneInfo zone in zones)
{
Debug.Log($"ID: {zone.Id}, Display: {zone.DisplayName}");
}
}
// 时区转换
public static DateTime ConvertTimeZone(DateTime dateTime,
string sourceTimeZoneId,
string targetTimeZoneId)
{
TimeZoneInfo sourceTimeZone = TimeZoneInfo.FindSystemTimeZoneById(sourceTimeZoneId);
TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById(targetTimeZoneId);
DateTime sourceDateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified);
DateTime utcDateTime = TimeZoneInfo.ConvertTimeToUtc(sourceDateTime, sourceTimeZone);
DateTime targetDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, targetTimeZone);
return targetDateTime;
}
// 常用时区转换示例
public static DateTime ConvertToUTC(DateTime localTime)
{
return TimeZoneInfo.ConvertTimeToUtc(localTime);
}
public static DateTime ConvertFromUTC(DateTime utcTime, string targetTimeZoneId = "China Standard Time")
{
return TimeZoneInfo.ConvertTimeFromUtc(utcTime,
TimeZoneInfo.FindSystemTimeZoneById(targetTimeZoneId));
}
}
4. Unity特定的时间处理
Time 类(游戏时间)
public class GameTimeManager : MonoBehaviour
{
void Update()
{
// 游戏时间(受Time.timeScale影响)
float gameTime = Time.time;
float deltaTime = Time.deltaTime;
float fixedTime = Time.fixedTime;
float fixedDeltaTime = Time.fixedDeltaTime;
// 实时时间(不受Time.timeScale影响)
float realTime = Time.realtimeSinceStartup;
float unscaledDeltaTime = Time.unscaledDeltaTime;
}
}
5. 实用工具类
using System;
using System.Collections.Generic;
using UnityEngine;
public static class TimeUtility
{
// 常用时区ID
public static class TimeZoneIds
{
public const string UTC = "UTC";
public const string ChinaStandard = "China Standard Time"; // 中国标准时间
public const string EasternStandard = "Eastern Standard Time"; // 美国东部
public const string PacificStandard = "Pacific Standard Time"; // 美国太平洋
}
// 获取当前时间戳(秒)
public static long CurrentUnixTimestamp
{
get
{
return DateTimeToUnixTimestamp(DateTime.UtcNow);
}
}
// 获取当前时间戳(毫秒)
public static long CurrentMillisecondsTimestamp
{
get
{
return DateTimeToMillisecondsTimestamp(DateTime.UtcNow);
}
}
// 格式化时间显示
public static string FormatTime(DateTime dateTime, string format = "yyyy-MM-dd HH:mm:ss")
{
return dateTime.ToString(format);
}
// 获取相对时间描述(如"刚刚"、"3分钟前"等)
public static string GetRelativeTime(DateTime dateTime)
{
TimeSpan span = DateTime.Now - dateTime;
if (span.TotalSeconds < 60)
return "刚刚";
if (span.TotalMinutes < 60)
return $"{(int)span.TotalMinutes}分钟前";
if (span.TotalHours < 24)
return $"{(int)span.TotalHours}小时前";
if (span.TotalDays < 30)
return $"{(int)span.TotalDays}天前";
if (span.TotalDays < 365)
return $"{(int)(span.TotalDays / 30)}个月前";
return $"{(int)(span.TotalDays / 365)}年前";
}
// 计算时间差
public static TimeSpan GetTimeDifference(DateTime start, DateTime end)
{
return end - start;
}
// 检查是否为同一天
public static bool IsSameDay(DateTime date1, DateTime date2)
{
return date1.Year == date2.Year &&
date1.Month == date2.Month &&
date1.Day == date2.Day;
}
}