C#时间戳和格式化日期互转
- </pre><pre name="code" class="csharp">using UnityEngine;
- using System.Collections;
- using System;
- /// <summary>
- /// C#时间格式转换为时间戳(互转)
- /// 时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
- /// </summary>
- public class DateTime_TimeStamp : MonoBehaviour
- {
- protected int m_timestamp;
- /// <summary>
- /// 获取时间戳Timestamp
- /// </summary>
- /// <param name="dt"></param>
- /// <returns></returns>
- private int GetTimeStamp(DateTime dt)
- {
- DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
- int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
- return timeStamp;
- }
- /// <summary>
- /// 时间戳Timestamp转换成日期
- /// </summary>
- /// <param name="timeStamp"></param>
- /// <returns></returns>
- private DateTime GetDateTime(int timeStamp)
- {
- DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
- long lTime = ((long)timeStamp * 10000000);
- TimeSpan toNow = new TimeSpan(lTime);
- DateTime targetDt = dtStart.Add(toNow);
- return targetDt;
- }
- /// <summary>
- /// 时间戳Timestamp转换成日期
- /// </summary>
- /// <param name="timeStamp"></param>
- /// <returns></returns>
- private DateTime GetDateTime(string timeStamp)
- {
- DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
- long lTime = long.Parse(timeStamp + "0000000");
- TimeSpan toNow = new TimeSpan(lTime);
- DateTime targetDt = dtStart.Add(toNow);
- return dtStart.Add(toNow);
- }
- void OnGUI()
- {
- if (GUILayout.Button("获取当前时间的时间戳"))
- {
- DateTime dtNow = DateTime.Now;
- m_timestamp = GetTimeStamp(dtNow);
- Debug.Log(string.Format("获取当前时间的时间戳 = {0} -> {1}", dtNow.ToString("yyyy-MM-dd hh:mm:ss"), m_timestamp));
- }
- if (GUILayout.Button("将时间戳转换成日期_1"))
- {
- DateTime dt = GetDateTime(m_timestamp);
- Debug.Log(string.Format("将时间戳转换成日期_1 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
- }
- if (GUILayout.Button("将时间戳转换成日期_2"))
- {
- DateTime dt = GetDateTime(m_timestamp.ToString());
- Debug.Log(string.Format("将时间戳转换成日期_2 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
- }
- }
- }
有时候我们要对C#时间进行转换,达到不同的显示效果
默认格式为:2005-6-6 14:33:34
如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢
我们要用到:DateTime.ToString的方法(String,IFormatProvider) string 为你需要的时间格式如 string format = "yyyy/MM/dd HH:mm:ss";
usingSystem;
usingSystem.Globalization;
String format="D";
DateTimedate=DataTime.Now;
Response.Write(date.ToString(format,DateTimeFormatInfo.InvariantInfo));
结果输出
Thursday,June16,2005
参数format格式详细用法
格式字符关联属性/说明
dShortDatePattern
DLongDatePattern
f完整日期和时间(长日期和短时间)
FFullDateTimePattern(长日期和长时间)
g常规(短日期和短时间)
G常规(短日期和长时间)
m、MMonthDayPattern
r、RRFC1123Pattern
s使用当地时间的SortableDateTimePattern(基于ISO8601)
tShortTimePattern
TLongTimePattern
uUniversalSortableDateTimePattern用于显示通用时间的格式
U使用通用时间的完整日期和时间(长日期和长时间)
y、YYearMonthPattern
下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。
C#时间格式模式说明
日期格式:yyyyMMdd HH:mm:ss(注意此字符串的字母大小写很严格)
yyyy:代表年份
MM: 代表月份
dd: 代表天
HH: 代表小时(24小时制)
mm: 代表分钟
ss: 代表秒
d月中的某一天。一位数的日期没有前导零。
dd月中的某一天。一位数的日期有一个前导零。
ddd周中某天的缩写名称,在AbbreviatedDayNames中定义。
dddd周中某天的完整名称,在DayNames中定义。
M月份数字。一位数的月份没有前导零。
MM月份数字。一位数的月份有一个前导零。
MMM月份的缩写名称,在AbbreviatedMonthNames中定义。
MMMM月份的完整名称,在MonthNames中定义。
y不包含纪元的年份。如果不包含纪元的年份小于10,则显示不具有前导零的年份。
yy不包含纪元的年份。如果不包含纪元的年份小于10,则显示具有前导零的年份。
yyyy包括纪元的四位数的年份。
gg时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h12小时制的小时。一位数的小时数没有前导零。
hh12小时制的小时。一位数的小时数有前导零。
H24小时制的小时。一位数的小时数没有前导零。
HH24小时制的小时。一位数的小时数有前导零。
m分钟。一位数的分钟数没有前导零。
mm分钟。一位数的分钟数有一个前导零。
s秒。一位数的秒数没有前导零。
ss秒。一位数的秒数有一个前导零。
f秒的小数精度为一位。其余数字被截断。
ff秒的小数精度为两位。其余数字被截断。
fff秒的小数精度为三位。其余数字被截断。
ffff秒的小数精度为四位。其余数字被截断。
fffff秒的小数精度为五位。其余数字被截断。
ffffff秒的小数精度为六位。其余数字被截断。
fffffff秒的小数精度为七位。其余数字被截断。
t在AMDesignator或PMDesignator中定义的AM/PM指示项的第一个字符(如果存在)。
tt在AMDesignator或PMDesignator中定义的AM/PM指示项(如果存在)。
z时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。
zz时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。
zzz完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。
:在TimeSeparator中定义的默认时间分隔符。
/在DateSeparator中定义的默认日期分隔符。
%c其中c是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。
c其中c是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“”。
只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,
DateTime.ToString("d")返回DateTime值;“d”是标准短日期模式。
DateTime.ToString("%d")返回月中的某天;“%d”是自定义模式。
DateTime.ToString("d")返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。
DateTime data = DateTime.Now;
string format = "yyyy/MM/dd HH:mm:ss";
Debug.Log("data 1=" + data.ToString(format, DateTimeFormatInfo.InvariantInfo));
Debug.Log("data 2=" + data.ToString("d"));
Debug.Log("data 3=" + data.ToString("%d"));
Debug.Log("data 4=" + data.ToString("dd"));
Debug.Log("data 5=" + data.ToString("ddd"));
Debug.Log("data 6=" + data.ToString("dddd"));
Debug.Log("data 7=" + data.ToString("M"));
Debug.Log("data 8=" + data.ToString("MM"));
Debug.Log("data 9=" + data.ToString("MMM"));
Debug.Log("data 10=" + data.ToString("MMMM"));
Debug.Log("data 11=" + data.ToString("y"));
Debug.Log("data 12=" + data.ToString("yy"));
Debug.Log("data 13=" + data.ToString("yyyy"));
//Debug.Log("data 14=" + data.ToString("h"));
Debug.Log("data 15=" + data.ToString("hh"));
//Debug.Log("data 16=" + data.ToString("H"));
Debug.Log("data 17=" + data.ToString("HH"));
Debug.Log("data 18=" + data.ToString("m"));
Debug.Log("data 19=" + data.ToString("mm"));
Debug.Log("data 20=" + data.ToString("s"));
Debug.Log("data 21=" + data.ToString("ss"));
Debug.Log("data 22=" + data.ToString("t"));
Debug.Log("data 23=" + data.ToString("tt"));
//Debug.Log("data 24=" + data.ToString("z"));
Debug.Log("data 25=" + data.ToString("zz"));
Debug.Log("data 26=" + data.ToString("zzz"));
一下是测试结果(14,16,24 这三个我是没有测试出来,有大神测试出来了希望相告一下,互相学习!O(∩_∩)O~)
比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
如要得到2005年06月这样格式的C#时间
C#时间可以这样写:
date.ToString("yyyy年MM月",DateTimeFormatInfo.InvariantInfo)
方法一:Convert.ToDateTime(string)
string格式有要求,必须是yyyy-MM-dd hh:mm:ss
================================================
方法二:Convert.ToDateTime(string, IFormatProvider)
DateTime dt;
DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd";//自定义格式
dt = Convert.ToDateTime("2011/05/26", dtFormat);
string format = "2017/08/21/19/00/00";
DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();
dtFormat.LongDatePattern = "yyyy/MM/dd/HH/mm/ss";//自定义格式
DateTime data = Convert.ToDateTime(format, dtFormat);
Debug.Log("data 1=" + data.Year);
================================================
方法二:DateTime.ParseExact()
string dateString = "20110526";
DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
或者
DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
附参考信息:
CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("en-US"); string format = "ddd MMM d HH:mm:ss zz00 yyyy"; string stringValue = DateTime.Now.ToString(format, cultureInfo); // 得到日期字符串 DateTime datetime = DateTime.ParseExact("Wed Aug 25 16:28:03 +0800 2010", format, cultureInfo); // 将字符串转换成日期
其他