Index: test/tc_timezone.rb
===================================================================
--- test/tc_timezone.rb	(revision 319)
+++ test/tc_timezone.rb	(working copy)
@@ -383,6 +383,48 @@
     assert_raises(PeriodNotFound) { i_tz.period_for_local(i) }
   end
   
+  def test_period_for_local_dst_default_set_true
+    Timezone.default_dst= true
+    o1 = TimezoneOffsetInfo.new(-18000, 0, :EST)
+    o2 = TimezoneOffsetInfo.new(-18000, 3600, :EDT)
+    
+    t1 = TimezoneTransitionInfo.new(o2, o1, 1081062000)
+    t2 = TimezoneTransitionInfo.new(o1, o2, 1099202400)
+    t3 = TimezoneTransitionInfo.new(o2, o1, 1112511600)
+    
+    p1 = TimezonePeriod.new(t1, t2)
+    p2 = TimezonePeriod.new(t2, t3)
+    
+    dt = DateTime.new(2004,10,31,1,30,0)
+    
+    tz = TestTimezone.new('America/New_York', nil, [p1, p2], dt)
+
+    assert_equal(p1, tz.period_for_local(dt))
+    assert_equal(p1, tz.period_for_local(dt, true))
+    assert_equal(p2, tz.period_for_local(dt, false))
+  end
+  
+  def test_period_for_local_dst_default_set_false
+    Timezone.default_dst= false
+    o1 = TimezoneOffsetInfo.new(-18000, 0, :EST)
+    o2 = TimezoneOffsetInfo.new(-18000, 3600, :EDT)
+    
+    t1 = TimezoneTransitionInfo.new(o2, o1, 1081062000)
+    t2 = TimezoneTransitionInfo.new(o1, o2, 1099202400)
+    t3 = TimezoneTransitionInfo.new(o2, o1, 1112511600)
+    
+    p1 = TimezonePeriod.new(t1, t2)
+    p2 = TimezonePeriod.new(t2, t3)
+    
+    dt = DateTime.new(2004,10,31,1,30,0)
+    
+    tz = TestTimezone.new('America/New_York', nil, [p1, p2], dt)
+
+    assert_equal(p2, tz.period_for_local(dt))
+    assert_equal(p1, tz.period_for_local(dt, true))
+    assert_equal(p2, tz.period_for_local(dt, false))
+  end
+  
   def test_period_for_local_dst_flag_resolved
     o1 = TimezoneOffsetInfo.new(-18000, 0, :EST)
     o2 = TimezoneOffsetInfo.new(-18000, 3600, :EDT)
Index: lib/tzinfo/timezone.rb
===================================================================
--- lib/tzinfo/timezone.rb	(revision 319)
+++ lib/tzinfo/timezone.rb	(working copy)
@@ -68,6 +68,9 @@
     # Whether the timezones index has been loaded yet.
     @@index_loaded = false
     
+    # Set a default for DST ambiguity
+    @@default_dst = nil
+    
     # Returns a timezone by its identifier (e.g. "Europe/London", 
     # "America/Chicago" or "UTC").
     #
@@ -328,7 +331,7 @@
     # array of the periods that need to be resolved. The block can select and
     # return a single period or return nil or an empty array
     # to cause an AmbiguousTime exception to be raised.
-    def period_for_local(local, dst = nil)            
+    def period_for_local(local, dst = @@default_dst)
       results = periods_for_local(local)
       
       if results.empty?
@@ -487,6 +490,16 @@
       Timezone.get(data)
     end
     
+    # Set the default dst for #local_to_utc
+    def self.default_dst=(value)
+      @@default_dst = (true && value)
+    end
+    
+    # Get the default dst for #local_to_utc
+    def self.default_dst
+      @@default_dst
+    end
+    
     private
       # Loads in the index of timezones if it hasn't already been loaded.
       def self.load_index
