1

タイムスタンプ形式にはあまり詳しくありません。

たとえば、テキストがあります

'Jul 19, 2013 12:00 pm' 

mysqlに保存したいです。MySQL でのこのタイムスタンプの形式と、mysql に渡す前に perl で適切にフォーマットする方法を教えてください。

ありがとう。

4

2 に答える 2

4

MySQL のタイムスタンプの形式は何ですか?

MySQLのマニュアルを読むことを強くお勧めします。StackOverflow に質問を投稿するよりもはるかに早く回答を得ることができます。ドキュメントから:

TIMESTAMP の範囲は、「1970-01-01 00:00:01」UTC から「2038-01-19 03:14:07」UTC です。

ご覧のとおり、フォーマットはYYYY-MM-DD HH:MM:SS.

ysthがコメントで指摘しているように、MySQL には次のDATETIMEデータ型もあります。

MySQL は、DATETIME 値を「YYYY-MM-DD HH:MM:SS」形式で取得して表示します。サポートされている範囲は「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使用することを検討してください。vs.の詳細については、この StackOverflow の質問DATETIMEを参照してください。DATETIMETIMESTAMP

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午前

ここで、10 未満の曜日と時間はゼロで始まります。入力形式が実際に

2013 年10 月1日 午前5

に渡されるフォーマット文字列を変更する必要がありますTime::Piece->strptime。フォーマット指定子のリストは、 strftime の man ページにあります。

于 2013-10-06T14:40:44.097 に答える