簡體   English   中英

mysql和perl中的時間戳格式

[英]timestamp format in mysql and perl

我對時間戳格式不太熟悉。

我有一個例子

'Jul 19, 2013 12:00 pm' 

我想將其存儲到mysql。 在MySQL中,此時間戳的格式是什么?在將其傳遞給mysql之前,應如何在perl中正確格式化該時間戳。

謝謝。

MySQL中時間戳的格式是什么?

強烈建議您閱讀MySQL手冊 與在StackOverflow上發布問題相比,獲得答案的速度要快得多。 文檔

TIMESTAMP的UTC范圍為'1970-01-01 00:00:01'至UTC'2038-01-19 03:14:07'。

如您所見,格式為YYYY-MM-DD HH:MM:SS

正如評論中指出的那樣,MySQL還具有DATETIME數據類型:

MySQL檢索並以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值。 支持的范圍是“ 1000-01-01 00:00:00”到“ 9999-12-31 23:59:59”。

需要注意的幾件事:

  • DATETIMETIMESTAMP都使用格式YYYY-MM-DD HH:MM:SS
  • 受支持的日期范圍DATETIME比對范圍更大的 TIMESTAMP
  • TIMESTAMP將值轉換為UTC進行存儲,並在檢索時返回本地時區; DATETIME不進行時區轉換

如果您還不熟悉TIMESTAMP數據類型,則可以考慮使用DATETIME ,具體取決於您要存儲的數據類型。 有關DATETIMETIMESTAMP更多詳細信息,請參見此StackOverflow問題

在將其傳遞給MySQL之前,應如何在Perl中對其進行格式化?

要將日期/時間字符串轉換為Perl中的不同格式,可以使用核心(自v5.9起)模塊Time :: Piece

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Time::Piece;

my $date = 'Jul 19, 2013 12:00 pm';
my $t = Time::Piece->strptime($date, '%b %d, %Y %I:%M %p');
say $t->strftime('%F %T');
# 2013-07-19 12:00:00

從示例日期字符串中還不清楚日期和小時是否補零。 上面的示例假設格式為

2013年10月1日05:00

其中少於十天的天數和小時數從零開始。 如果您輸入的格式實際上是

2013年10月15:00

那么您需要更改傳遞給Time::Piece->strptime的格式字符串。 可以在手冊頁中找到strftime的格式說明符列表。

時間:: Piece從5.9開始就是Perl的核心模塊。 它提供了一種方便的方法來解析任何時間格式的輸入(使用strptime() )並生成不同格式的輸出(使用strftime()

#cat ./tconv
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime( shift, "%b %d, %Y %I:%M %p" );
print $t->epoch, "\n";
print $t->strftime( $t, "%Y/%m/%d %T %z" ), "\n";

#./tconv "Jul 19, 2013 12:00 pm"
1374235200
Fri Jul 19 12:00:00 2013

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM