Every DLT has the need of a system that links information to time. This concept is widely used in many components in the IOTA protocol, such as to control spam (rate control), limit the reach of approvals to keep the Tangle growing (tip selection), and define the threshold for data clearing (snapshots). Furthermore, time is used by external applications running on the tangle which need to track when data was added to the tangle.
In the legacy implementation and Chrysalis, the main time references are milestones: The milestone index of a message is the first milestone referencing it. Since milestones contain timestamps (which are correct, as they are set by the coordinator), this connects every message to a point in time. Thus the milestone index is a reliable reference for time. With Nectar, decentralization brought the need for a new way to define those references: Timestamps.
In Nectar, timestamps are values declared and signed by the node issuing the message, and are expected to represent the issuance time of the message (from the point of view of the issuer node). It is important to understand the difference between the timestamps and the clock time. Timestamps are objective: all nodes will associate the same timestamps to the same messages, hence they can be used in any application without creating any issues with consensus or other disagreements.
One could argue that as they are declared, timestamps do not reflect the real issuance time. Although this is true, timestamps are checked when processing a received message. If the timestamp is too far off the local time, nodes vote on whether to reject the timestamp. This means that only small differences between timestamps and issuance times are accepted by the protocol, and such differences would not lead to problems in any of the modules using timestamps. These potential, small differences in timestamps and issuance times are an insignificant price to pay for achieving agreement on a time variable.