diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 1282d228..a462e21b 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -336,18 +336,27 @@ void FrameFactory::rebuildAggregateFrames(ID3v2::Tag *tag) const tag->frameList("TDRC").size() == 1 && tag->frameList("TDAT").size() == 1) { - TextIdentificationFrame *trdc = + TextIdentificationFrame *tdrc = static_cast(tag->frameList("TDRC").front()); - UnknownFrame *tdat = - static_cast(tag->frameList("TDAT").front()); + UnknownFrame *tdat = static_cast(tag->frameList("TDAT").front()); - if(trdc->fieldList().size() == 1 && - trdc->fieldList().front().size() == 4 && + if(tdrc->fieldList().size() == 1 && + tdrc->fieldList().front().size() == 4 && tdat->data().size() >= 5) { String date(tdat->data().mid(1), String::Type(tdat->data()[0])); - if(date.length() == 4) - trdc->setText(trdc->toString() + '-' + date.substr(2, 2) + '-' + date.substr(0, 2)); + if(date.length() == 4) { + tdrc->setText(tdrc->toString() + '-' + date.substr(2, 2) + '-' + date.substr(0, 2)); + if(tag->frameList("TIME").size() == 1) { + UnknownFrame *timeframe = static_cast(tag->frameList("TIME").front()); + if(timeframe->data().size() >= 5) { + String time(timeframe->data().mid(1), String::Type(timeframe->data()[0])); + if(time.length() == 4) { + tdrc->setText(tdrc->toString() + 'T' + time.substr(0, 2) + ':' + time.substr(2, 2)); + } + } + } + } } } } @@ -533,3 +542,4 @@ bool FrameFactory::updateFrame(Frame::Header *header) const return true; } + diff --git a/tests/test_id3v2.cpp b/tests/test_id3v2.cpp index c6592bbe..cf2e854b 100644 --- a/tests/test_id3v2.cpp +++ b/tests/test_id3v2.cpp @@ -690,7 +690,7 @@ public: tf = static_cast(bar.ID3v2Tag()->frameList("TDRC").front()); CPPUNIT_ASSERT(tf); CPPUNIT_ASSERT_EQUAL(TagLib::uint(1), tf->fieldList().size()); - CPPUNIT_ASSERT_EQUAL(String("2012-04-17"), tf->fieldList().front()); + CPPUNIT_ASSERT_EQUAL(String("2012-04-17T12:01"), tf->fieldList().front()); tf = dynamic_cast(bar.ID3v2Tag()->frameList("TIPL").front()); CPPUNIT_ASSERT(tf); CPPUNIT_ASSERT_EQUAL(TagLib::uint(8), tf->fieldList().size());