GVKun编程网logo

使用 strftime 将 python 日期时间转换为纪元(python datetime把日期转换字符串)

1

本文将为您提供关于使用strftime将python日期时间转换为纪元的详细介绍,我们还将为您解释pythondatetime把日期转换字符串的相关知识,同时,我们还将为您提供关于C语言strftim

本文将为您提供关于使用 strftime 将 python 日期时间转换为纪元的详细介绍,我们还将为您解释python datetime把日期转换字符串的相关知识,同时,我们还将为您提供关于C语言 strftime 格式化显示日期时间的实现、Django中datetime的处理方法(strftime/strptime)、perl 时间函数(timelocal,localtime,strftime)小用、php setlocale arabic strftime的实用信息。

本文目录一览:

使用 strftime 将 python 日期时间转换为纪元(python datetime把日期转换字符串)

使用 strftime 将 python 日期时间转换为纪元(python datetime把日期转换字符串)

我有一个 UTC 时间,我想要从纪元开始的秒数。

我正在使用 strftime 将其转换为秒数。以 2012 年 4 月 1 日为例。

>>>datetime.datetime(2012,04,01,0,0).strftime(''%s'')''1333234800''

2012 年 4 月 1 日 UTC 从纪元开始是 1333238400 ,但上面的返回 1333234800 相差 1 小时。

所以看起来 strftime 正在考虑我的系统时间并在某处应用时区转换。我认为 datetime 纯粹是幼稚的?

我怎样才能解决这个问题?如果可能避免导入其他库,除非是标准的。(我有便携性问题)。

答案1

小编典典

如果您想将 python 日期时间转换为自纪元以来的秒数,您可以显式执行此操作:

>>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds()1333238400.0

在 Python 3.3+
中,您可以timestamp()改用:

>>> datetime.datetime(2012,4,1,0,0).timestamp()1333234800.0

为什么你不应该使用datetime.strftime(''%s'')

Python 实际上并不支持 %s 作为 strftime
的参数(如果您在http://docs.python.org/library/datetime.html#strftime-and-strptime-
behavior检查它不在列表中),唯一的它工作的原因是因为 Python 正在将信息传递给您系统的 strftime,它使用您的本地时区。

>>> datetime.datetime(2012,04,01,0,0).strftime(''%s'')''1333234800''

C语言 strftime 格式化显示日期时间的实现

C语言 strftime 格式化显示日期时间的实现

C/C++程序中需要程序显示当前时间,可以使用标准函数strftime。

函数原型:size_t strftime (char* ptr,size_t maxsize,const char* format,const struct tm* timeptr );

代码示例:

#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [128];

  time (&rawtime);
  timeinfo = localtime (&rawtime);

  strftime (buffer,sizeof(buffer),"Now is %Y/%m/%d %H:%M:%s",timeinfo);
  puts (buffer);

  return 0;
}

代码输出:

@H_301_24@

格式化时间说明表:

 

以上这篇C语言 strftime 格式化显示日期时间的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

Django中datetime的处理方法(strftime/strptime)

Django中datetime的处理方法(strftime/strptime)

strftime<将date,datetime,timezone.now()类型处理转化为字符串类型>

  strftime()函数是用来格式化一个日期、日期时间和时间的函数,支持date、datetime、time等类,把这些时间通过格式字符要求格式为字符串表示。

rush:PHP;"> import datatime datatime.datatime.Now()

或者

rush:PHP;"> from datatime import datatime datatime.Now()

我的输出转化格式

strftime('%Y-%m-%d %H:%I:%s')

效果类似于2018-07-02 23:18:20这样.

strptime<将字符串处理转换成期望类型的数据>

  strptime()函数就是从字符串表示的日期时间按格式化字符串要求转换为相应的日期时间。

rush:PHP;"> d2 = datetime.strptime('2018-03-02 17:41:20','%Y-%m-%d %H:%M:%s')

转化对照的格式: 

转成字符串

%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) 十二小时制 %M 分钟数(00=59) %s 秒(00-59) 

遇到的两个bug:

一:显示时间和数据库不一致的bug:

  曾经遇到过这样的一个问题,从数据库取出来的时间和前端显示时间不一致的问题.后来经过多出输出时间各处转换的信息,最后发现,因为之前写代码的同事,使用了这样的

rush:PHP;"> one['time'] = one['time'].strftime('%Y-%m-%d %H:%I:%s')

%I是十二小时制的转换形式.这样转换格式的时候,虽然不会报错,可是输出的结果会和数据库的不一致,数据库是以24小时为单位记录的时间.

二:datetime.datetime(2018,2,18,25,29,tzinfo=) is not JSON serializable

出现这样的错误信息..

rush:PHP;"> datetime.datetime(2018,tzinfo=) is not JSON serializable

 这是出现在将datetime数据直接放在json里出现的错误信息.不能直接放在json里.

解决办法是:可以使用strftime进行序列化,如下面的方法

rush:PHP;"> .strftime("%Y-%m-%d %H:%M:%s")

下面看下Python:time,strftime和strptime的具体讲解

最常用的time.time()返回的是一个浮点数,单位为秒。但strftime处理的类型是time.struct_time,实际上是一个tuple。strptime和localtime都会返回这个类型。

>> import time >>> t = time.time() >>> t 1202872416.4920001 >>> type(t) >>> t = time.localtime() >>> t (2008,13,10,56,44,0) >>> type(t) >>> time.strftime('%Y-%m-%d',t) '2008-02-13' >>> time.strptime('2008-02-14','%Y-%m-%d') (2008,14,3,45,-1)

以上所述是小编给大家介绍的Django中datetime的处理方法(strftime/strptime),希望对大家有所帮助。程序员遇到问题都会上(小编jb51.cc)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下!

perl 时间函数(timelocal,localtime,strftime)小用

perl 时间函数(timelocal,localtime,strftime)小用


 

近期依然要投入到万恶的维护行列,确实不是什么好事情。

不过也没法,工资上的去,暂时潜心学习呗。

 

因为项目是新确立的,所以所有的维护脚本都要自己去编写。

其中最烦的莫过于自己对perl不熟,还要写perl脚本。

这次讲几个perl时间函数的用法,在维护中比较常用。

 

目录:(以后再用到会更新)

一、Time::Local 集合。
二、POSIX qw(strftime)函数。

 

一、Time::Local 集合。

这个集合里面主要会用到以下函数:

timelocal()、localtime()。

 

timelocal()是从格式化的时间输入转换成秒;而localtime()是从秒转换成格式化的时间。

用perl的来表示就是如下结果:

my $second_str = timelocal($ss,$mi,$hh,$dd,$mm,$yy);

our ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($second_str);$year = $year+1900;

不过这个localtime 稍稍有点复杂,它有两种方式的输出,一种就是如上这一种的数组赋值方式,一种就是直接输出:print localtime($second_str);

这两种的输出结果是不一样的。如下:

 

perl -e ' use Time::Local; our ($ss,$yy) = (0,16,5,2013); my $second_str = timelocal($ss,$yy); print timelocal($ss,$yy)."\n"; our ($sec,$isdst) = localtime($second_str);$year = $year+1900; print localtime($second_str)."\n"; print "$year-$mon-$day $hour:$min:$sec $isdst:$yday:$wday\n";'

输出结果:

1371312000 Sun Jun 16 00:00:00 2013 2013-5-16 0:0:0 0:166:0

可以看出,同一个timelocal输出得到的second_str,两种输出方式得到的日期和结果是不一样的。

一个是6月16日,一个是5月16日。差了一个月之多~~~~~

很让人崩溃吧。

 

所以如果使用第一种方式(直接调用,非数组赋值)输出 localtime ,在计算 timelocal 的 second_str 之时,月份要减一,不过第二种的数组赋值方式最后输出的年份要加 1900 才能得到正确的结果。

另外,系统还自带一个 time() 函数,默认返回当前系统时间的 timelocal 。而且还自动月份减一了。

这就有点悲剧了,如果是使用数组方式赋值的话,这个time就不能用了。

 

话说,这两个函数有什么用捏?

主要用途是用来计算 时间差 的。

 

以下函数请保存成模板,随时可以调用。

#!/usr/bin/perl use Time::Local; sub second_str_cal{ #用于计算形似 20130516 这种日期的秒钟数 #input:($date_by_"YYYYMMDD") #output:($second_str1,$second_str2) $_cnt = @_; unless ( $_cnt == 1 and length($_[0]) == 8 ){print "Worng input,please use input like: second_str_cal(20130516) \n"; exit;} my ($ss,substr($_[0],6,2),4,4)); my $second_str1 = timelocal($ss,$yy); my $second_str2 = timelocal($ss,$mm-1,$yy); "$second_str1,$second_str2"; } sub format_time{ #用于格式化输出日期,依赖 second_str_cal 函数 #input:($second_str1,$second_str2) #output:($date_by_"YYYYMMDD",$week_day) $_cnt = @_; unless ( $_cnt == 2 ){print "Worng input,please use input like: format_time(1368692601,1368692601) \n"; exit;} my ($sec,$isdst) = localtime($_[0]); $year = $year + 1900; my ($week_day) = split(" ",localtime($_[1])); "$year$mon$day,$week_day"; } sub two_day_minus{ #用于计算两个日期的差,依赖 second_str_cal 函数 #input:($date1_by_"YYYYMMDD",$date2_by_"YYYYMMDD") #output:($day_minus) $_cnt = @_; unless ( $_cnt == 2 and length($_[0]) == 8 and length($_[1]) == 8 ){print "Worng input,please use input like: format_time(20130515,20130516) \n"; exit;} my ($second_str1_1) = split(",",second_str_cal("$_[0]")); my ($second_str2_1) = split(",second_str_cal("$_[1]")); my $day_minus = ($second_str2_1-$second_str1_1)/24/60/60; $day_minus = - $day_minus if($day_minus <0); "$day_minus"; } sub n_day_before{ #用于计算某天的前几天是什么日期,依赖 second_str_cal、format_time 函数 #input:($date1_by_"YYYYMMDD",$n) #output:($date1_by_"YYYYMMDD") $_cnt = @_; unless ( $_cnt == 1 and length($_[0]) == 8 ){print "Worng input,please use input like: second_str_cal(20130516) \n"; exit;} my ($second_str1,$second_str2) = split(",second_str_cal("$_[0]")); my $second_str1_minus = $second_str1 - $_[1]*24*60*60; my $second_str2_minus = $second_str2 - $_[1]*24*60*60; my ($date_by_day,$week_day) = split(",format_time($second_str1_minus,$second_str2_minus)); "$date_by_day,$week_day"; } #******************************************************* my $user_day="20130516"; my ($str1,$str2) = split(",second_str_cal("$user_day")); my ($a,$b) = split(",format_time($str1,$str2)); print "\nUser day is:$a,and the week day is:$b\n"; #******************************************************* #******************************************************* my $day1="20130516"; my $day2="20130512"; my $c = two_day_minus($day1,$day2); my $d = two_day_minus($day2,$day1); print "\n$day2 - $day1 = $c(days) $day1 - $day2 = $d(days)\n"; #******************************************************* #******************************************************* my $day3="20130516"; my $n1=3; my $n2=-2; my $e = n_day_before($day3,$n1); my $f = n_day_before($day3,$n2); print "\n$day3\'s $n1 days before is $e; $day3\'s $n2 days before is $f\n\n"; #*******************************************************

测试输出结果:

User day is:2013516,and the week day is:Thu 20130512 - 20130516 = 4(days) 20130516 - 20130512 = 4(days) 20130516's 3 days before is 2013513,Mon; 20130516's -2 days before is 2013518,Sat


 

二、POSIX qw(strftime)函数。

讲了这么多,终于到第二个内容,这个简单很多。

使用这个函数,就不用像前面那样使用数组输出这么多参数了,直接利用strftime函数的时间域定义一下格式就O了。

使用:

#!/usr/bin/perl use POSIX qw(strftime); print strftime("%Y-%m-%d %H:%M:%s\n",localtime(time));

会输出
2010-08-21 07:44:24


就能格式化输出啦,前提是你懂得了前面第一部分的localtime的用法。

偷笑

 

这个就不多说了,让大家慢慢去体会。


 

 附上

Strftime 时间域 (这个和 date 的命令的字符格式是一样的): %H: 小时(00..23) %I: 小时(01..12) %k: 小时(0..23) %l: 小时(1..12) %M: 分(00..59) %p: 显示出AM或PM %r: 时间(hh:mm:ss AM或PM),12小时 %s: 从1970年1月1日00:00:00到目前经历的秒数 %s: 秒(00..59) %T: 时间(24小时制)(hh:mm:ss) %X: 显示时间的格式(%H:%M:%S) %Z: 时区 日期域 %a: 星期几的简称( Sun..Sat) %A: 星期几的全称( Sunday..Saturday) %b: 月的简称(Jan..Dec) %B: 月的全称(January..December) %c: 日期和时间( Mon Nov 8 14:12:46 CST 1999) %d: 一个月的第几天(01..31) %D: 日期(mm/dd/yy) %h: 和%b选项相同 %j: 一年的第几天(001..366) %m: 月(01..12) %w: 一个星期的第几天(0代表星期天) %W: 一年的第几个星期(00..53,星期一为第一天) %x: 显示日期的格式(mm/dd/yy) %y: 年的最后两个数字( 1999则是99) %Y: 年(例如:1970,1996等)


 

转载请说明出处,谢谢。

 

----------------------------------------------------------------------

参考文献:

1. perldoc.perl.org

2. 扶 凯's blog

php setlocale arabic strftime

php setlocale arabic strftime

我在我的服务器上运行了locale -a,可以看到它安装了阿拉伯语语言环境设置:

> ar_AE
> ar_AE.iso88596
> ar_AE.utf8

但是,如果我通过以下方式设置区域设置:

$locale = array('ar_AE','ar_AE.iso88596','ar_AE.utf8','ar');
setlocale(LC_TIME,$locale);

并输出:

strftime('%A %d %B',$current_date)

显示的日期是英文,而不是阿拉伯文.

阿拉伯语是唯一不适用的语言:我正在使用的网站有15种语言,所有其他语言都显示翻译日期.

出了什么问题?

解决方法

这对我来说毫无问题.

setlocale(LC_ALL,'ar_AE.utf8');

如果这不起作用,那么PHP文件中的另一个代码会干扰语言.

我们今天的关于使用 strftime 将 python 日期时间转换为纪元python datetime把日期转换字符串的分享已经告一段落,感谢您的关注,如果您想了解更多关于C语言 strftime 格式化显示日期时间的实现、Django中datetime的处理方法(strftime/strptime)、perl 时间函数(timelocal,localtime,strftime)小用、php setlocale arabic strftime的相关信息,请在本站查询。

本文标签: