[英]timestamp format in mysql and perl
我對時間戳格式不太熟悉。
我有一個例子
'Jul 19, 2013 12:00 pm'
我想將其存儲到mysql。 在MySQL中,此時間戳的格式是什么?在將其傳遞給mysql之前,應如何在perl中正確格式化該時間戳。
謝謝。
我強烈建議您閱讀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”。
需要注意的幾件事:
DATETIME
和TIMESTAMP
都使用格式YYYY-MM-DD HH:MM:SS
DATETIME
比對范圍更大的 TIMESTAMP
TIMESTAMP
將值轉換為UTC進行存儲,並在檢索時返回本地時區; DATETIME
不進行時區轉換 如果您還不熟悉TIMESTAMP
數據類型,則可以考慮使用DATETIME
,具體取決於您要存儲的數據類型。 有關DATETIME
與TIMESTAMP
更多詳細信息,請參見此StackOverflow問題 。
要將日期/時間字符串轉換為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月1日5: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.