GVKun编程网logo

php实现兼容2038年后Unix时间戳转换函数(php unix时间戳转换成时间)

11

本文将介绍php实现兼容2038年后Unix时间戳转换函数的详细情况,特别是关于phpunix时间戳转换成时间的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉

本文将介绍php实现兼容2038年后Unix时间戳转换函数的详细情况,特别是关于php unix时间戳转换成时间的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于64位unix时间戳转换、android: 日期转Unix时间戳,Unix时间戳转日期,带时区、c – 64位unix时间戳转换、C# unix时间戳转换的知识。

本文目录一览:

php实现兼容2038年后Unix时间戳转换函数(php unix时间戳转换成时间)

php实现兼容2038年后Unix时间戳转换函数(php unix时间戳转换成时间)

使用方法跟旧的函数一模一样.

代码如下:
; } try{ $date = new DateTime($var2); $date->setTimezone(new DateTimeZone(date_default_timezone_get())); }catch(Exception $e){ $date = 0;} if(is_object($date)){ if($var1) $date->modify($var1); return $date->format('U'); }else{ return 0; } } function fun_date($var1=0,$var2=0){ if(!$var2){ $var2 = $var1; $var1 = 'Y-m-d H:i:s'; } try{ $date = new DateTime(); $date->setTimezone(new DateTimeZone(date_default_timezone_get())); }catch(Exception $e){ $date = 0;} if(is_object($date)){ return $date->format($var1); }else{ return ''; } }

以上就是本文所述的全部内容了,希望对大家学习PHP有所帮助。

64位unix时间戳转换

64位unix时间戳转换

是否有32位系统的64位unix时间戳转换的C ++实现? 我需要将struct tm转换为64位整数,反之亦然,包括闰年,时区,UTC。 至less对于GNU / Linux和Windows,也需要它的便携性。

在c和windows中获取进程组的用户时间

如何在bash脚本中存储“time”函数输出的子string

如何衡量一个(linux C)函数执行多长时间?

用于测量时间的HPET频率与cpu频率之间的关系

什么是CLOCK_TAI的时代?

你需要:

typedef long long time64_t; time64_t mktime64 (struct tm *t); struct tm *localtime64_r (const time64_t *t,struct tm *p);

将struct tm*转换为time_t的函数是mktime 。 你可以找到它的很多实现,例如。 在Glibc和libvxc的mktime.c文件中 。 你可以把代码(假设它是合法的,所以请尊重许可证),并将time_t更改为64位整数,如int64_t 。

执行从time_t到struct tm*的其他转换的函数是localtime或gmtime ,您也可以这样做。

然而,你可能有一个更基本的问题:你在2040年运行的32位机器应该有一些方法在time_t的64位变量中给出当前时间(如系统调用所做的那样),这是很多更难(这取决于内核和硬件)。

您似乎假设time_t是32位系统上的32位,这可能是也可能不是这样。

在Windows上,从Visual Studio 2005开始, time_t的大小是64位,即使在编译32位Windows时也是如此。

不幸的是,glibc将它定义为long int ,在32位系统上它是一个32位整数。 这意味着基于gcc / glibc(如Cygwin)的32位Linux和其他32位平台将无法使用64位时间戳。

如果您的应用程序必须在32位glibc上运行,那么您应该使用自己的转换函数,这可能与C库中的相同函数重新编译为使用64位时间戳。

如果您需要使用许可证(BSD)的源代码,那么您可以在minix3中查看这些函数。 这是本地时间。 源超链接,所以你可以很容易地找到其他人。

是的,使用stuct tm *_localtime64 ( const __time64_t *timer);

这就是如果你的Windows粉丝。

android: 日期转Unix时间戳,Unix时间戳转日期,带时区

android: 日期转Unix时间戳,Unix时间戳转日期,带时区

1、UTC时间&GMT时间

UTC时间是时间标准时间(Universal Time Coordinated),UTC是根据原子钟来计算时间,误差非常小。

UTC也是指零时区的时间,如果要表示其他时区的时间,这里要注意没有UTC+0800或者UTC+8这样的表示方式(至少Java里面没有,一般用于口头表示),只有Asia/Shanghai这样的表示方式,详细的时区列表参考这个文档时区列表。

GMT时间是根据地球的自转和公转来计算时间,老的时间计量标准,这里我们不过多讨论

2、表达时间方式

我们一般表示时间都会带格式以方便理解,例如时间表达式是''2018-09-12 08:00:00'',因为我们在东八区,所以默认是:北京时间2018年9月12号8点整。但是如果是一个美国人看到这个时间,就会认为是美国东部or西部时间的2018年9月12号8点整。所以从这种表达方式很不准确,因为没有指明到底是哪个时区的时间!!!!

所以准确的表达时间必须带有时区,例如2018-09-12 08:00:00+0800,表达了Asia/Shanghai这个时区的时间2018年9月12号8点整。这里要注意+0800并不是表示加8小时的意思,只是表示这个时间''2018-09-12 08:00:00''是东八区Asia/Shanghai的时间,仅此而已。

3、UTC时间的时间戳

讲清楚了时间表达方式,再讲时间戳。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。也就是在''1970-01-1 00:00:00+0000'' 或 ''1970-01-1 08:00:00+0800''这个时间点,时间戳是0。这也是Java里时间组件的默认方式,不管用户输入的人类可识别的时间是什么格式,在内部统一存的是时间戳。

例如时间是''2018-09-01 08:00:00+0800'',那么使用date.getTime()获取到时间戳是1535760000000;时间是''2018-09-01 00:00:00+0000'',获取到时间戳也是1535760000000。

     try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ", Locale.getDefault());

            Log.i("xp.chen", sdf.parse("2018-09-01 08:00:00+0800").getTime()+"");
            Log.i("xp.chen", sdf.parse("2018-09-01 00:00:00+0000").getTime()+"");
            Log.i("xp.chen", sdf.parse("1970-01-01 00:00:00+0000").getTime()+"");
        } catch (ParseException e) {
            e.printStackTrace();
        }

运行结果:

2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000
2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000
2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 0

4、时间戳与日期之前的相互转换

【时间戳转日期】

    long curTime = 1535760000000L;
        String timeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault()).format(new Date(curTime));
        Log.i("xp.chen", "timeStr: "+timeStr);

运行结果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeStr: 2018-09-01 08:00:00 +0800

【日期转时间戳】

     try {
            String src_dateStr = "2018-09-01 08:00:00 +0800";
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault()).parse(src_dateStr));
            long timeInMillis = calendar.getTimeInMillis();
            Log.i("xp.chen", "timeInMillis: "+timeInMillis);
        } catch (ParseException e) {
            e.printStackTrace();
        }

运行结果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeInMillis: 1535760000000

【获得当前日期字符串含时区】

  public static String getDateStrIncludeTimeZone() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault());
        return sdf.format(new Date());
    }

 

c – 64位unix时间戳转换

c – 64位unix时间戳转换

32位系统是否有64位unix时间戳转换的C实现?我需要将struct tm转换为64位整数,反之亦然,包括闰年,时区,UTC.还需要它可移植,至少对于GNU / Linux和Windows.

解决方法

你需要:
typedef long long time64_t; 
time64_t mktime64 (struct tm *t); 
struct tm *localtime64_r (const time64_t *t,struct tm *p);

C# unix时间戳转换

C# unix时间戳转换

场景:由于业务需要和java 开发的xxx系统对接日志,xxx系统中用“1465195479100” 来表示时间,C# 里面需要转换做一下逻辑处理,见代码段。

C#获取的unix时间戳是10位,原因是 java采用毫秒计算,而C#采用秒,获取unix时间戳的代码中 乘以1000就是这个原因。

C#中直接获取时间戳, DateTime.Now.Ticks;  ( DateTime.Now.Ticks;是从0001 年 1 月 1 日午夜 12:00:00 开始,单位是微秒。

/// <summary>  
/// 获取时间戳  13位
/// </summary>  
/// <returns></returns>  
public static long GetTimeStamp()
{
  TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
  return Convert.ToInt64(ts.TotalSeconds * 1000);
}
/// <summary>
/// 将时间戳转换为日期类型,并格式化
/// </summary>
/// <param name="longDateTime"></param>
/// <returns></returns>
private static string LongDateTimeToDateTimeString(string longDateTime)
{
    //用来格式化long类型时间的,声明的变量
    long unixDate = long.Parse(longDateTime);
    DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    DateTime date = start.AddMilliseconds(unixDate).ToLocalTime();    
 
    return date.ToString("yyyy-MM-dd HH:mm:ss");
}
/// <summary> 
/// 获取时间戳 10位
/// </summary> 
/// <returns></returns> 
public static long GetTimeStampTen()
{
  return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
}

 

关于php实现兼容2038年后Unix时间戳转换函数php unix时间戳转换成时间的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于64位unix时间戳转换、android: 日期转Unix时间戳,Unix时间戳转日期,带时区、c – 64位unix时间戳转换、C# unix时间戳转换的相关信息,请在本站寻找。

本文标签:

上一篇php访问数组最后一个元素的函数end()用法(php 获取数组最后一个元素)

下一篇php通过array_merge()函数合并两个数组的方法(php array合并)