user18905: RTC seems to be sporadically returning bogus date/times. Here are the logs from my serial monitor:
2016/3/23 8:19:46
2017/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2165/165/165 15:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46

That 2165/165/165 15:19:46 appears throughout the logs.
Here's the relevant code:
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  DateTime now = rtc.now(); 

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
}

I have a Grove RTC module.

user3917: Previous reports of this RTC problem (1,2,3) attribute it to hardware issues, such as broken wires (to SCL or to battery) and overvoltage (>3.6 V supply vs 3 to 3.3 V).  
If your setup uses breadboards or other temporary connections, you might try adding some redundant wires.  If your setup uses soldered connections, go over them carefully, looking for shorts and opens; or use a solder sucker / solder wick to remove old solder; then solder anew to make fresh, bright connections.
If you don't locate a hardware problem (and perhaps even if you do) you could add error-testing to your sketch.  That code would see if all relevant fields have valid, in-range values.  If any fields are invalid, it would delay a few milliseconds and then reread the RTC.  

user10794: The RTC library does not check for communications success. In particular, here:
DateTime RTC_DS1307::now() {
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send((byte) 0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);
  uint8_t ss = bcd2bin(Wire.read() & 0x7F);
  uint8_t mm = bcd2bin(Wire.read());
  uint8_t hh = bcd2bin(Wire.read());
  Wire.read();
  uint8_t d = bcd2bin(Wire.read());
  uint8_t m = bcd2bin(Wire.read());
  uint16_t y = bcd2bin(Wire.read()) + 2000;

  return DateTime (y, m, d, hh, mm, ss);
}

There should be a check for a zero returned from Wire.endTransmission(). It isn't otherwise possible to detect if the data is invalid (if we got the endTransmission OK) however generally speaking I2C will return 0xFF if the transmission has ceased.
The code in the library for bcd2bin is this:
static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); }

You can see that if passed 0xFF (255) it will return:
   255 - (6 * 15) = 165

Thus if any of the minutes, hours, day or month (which are not further affected in the code above) are 165 (or if the year is 2165) you can assume the whole date/time is bad.

18905: <p>RTC seems to be sporadically returning bogus date/times. Here are the logs from my serial monitor:</p>

<pre><code>2016/3/23 8:19:46
2017/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2165/165/165 15:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
2016/3/23 8:19:46
</code></pre>

<p>That <code>2165/165/165 15:19:46</code> appears throughout the logs.</p>

<p>Here's the relevant code:</p>

<pre class="lang-c prettyprint-override"><code>#include &lt;Wire.h&gt;
#include "RTClib.h"

RTC_DS1307 rtc;

void setup() {
  Serial.begin(9600);

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date &amp; time this sketch was compiled
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  DateTime now = rtc.now(); 

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
}
</code></pre>

<p>I have a <a href="http://www.seeedstudio.com/wiki/Grove_-_RTC" rel="nofollow">Grove RTC module</a>.</p>
 3917: <p>Previous reports of this RTC problem (<a href="https://forums.adafruit.com/viewtopic.php?f=22&amp;p=194535" rel="nofollow">1</a>,<a href="https://forums.adafruit.com/viewtopic.php?f=25&amp;t=66041" rel="nofollow">2</a>,<a href="https://forum.arduino.cc/index.php?topic=189283.0" rel="nofollow">3</a>) attribute it to hardware issues, such as broken wires (to SCL or to battery) and overvoltage (<code>&gt;</code>3.6 V supply vs 3 to 3.3 V).  </p>

<p>If your setup uses breadboards or other temporary connections, you might try adding some redundant wires.  If your setup uses soldered connections, go over them carefully, looking for shorts and opens; or use a solder sucker / solder wick to remove old solder; then solder anew to make fresh, bright connections.</p>

<p>If you don't locate a hardware problem (and perhaps even if you do) you could add error-testing to your sketch.  That code would see if all relevant fields have valid, in-range values.  If any fields are invalid, it would delay a few milliseconds and then reread the RTC.  </p>
 10794: <p>The RTC library does not check for communications success. In particular, here:</p>



<pre class="lang-C++ prettyprint-override"><code>DateTime RTC_DS1307::now() {
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send((byte) 0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);
  uint8_t ss = bcd2bin(Wire.read() &amp; 0x7F);
  uint8_t mm = bcd2bin(Wire.read());
  uint8_t hh = bcd2bin(Wire.read());
  Wire.read();
  uint8_t d = bcd2bin(Wire.read());
  uint8_t m = bcd2bin(Wire.read());
  uint16_t y = bcd2bin(Wire.read()) + 2000;

  return DateTime (y, m, d, hh, mm, ss);
}
</code></pre>

<p>There should be a check for a zero returned from <code>Wire.endTransmission()</code>. It isn't otherwise possible to detect if the data is invalid (if we got the endTransmission OK) however generally speaking I2C will return 0xFF if the transmission has ceased.</p>

<p>The code in the library for <code>bcd2bin</code> is this:</p>

<pre class="lang-C++ prettyprint-override"><code>static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val &gt;&gt; 4); }
</code></pre>

<p>You can see that if passed 0xFF (255) it will return:</p>



<pre class="lang-none prettyprint-override"><code>   255 - (6 * 15) = 165
</code></pre>

<p>Thus if any of the minutes, hours, day or month (which are not further affected in the code above) are 165 (or if the year is 2165) you can assume the whole date/time is bad.</p>
